{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"../img/ods_stickers.jpg\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归和线性分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 介绍"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本次实验简述了最小二乘法、最大似然估计、逻辑回归、正则化、验证和学习曲线的基本概念，搭建了基于逻辑回归的线性模型并进行正则化，通过分析 IBMD 数据集的二元分类问题和一个 XOR 问题阐述逻辑回归的优缺点。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 知识点"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 回归\n",
    "- 线性分类\n",
    "- 逻辑回归的正则化\n",
    "- 逻辑回归的优缺点\n",
    "- 验证和学习曲线"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最小二乘法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在开始学习线性模型之前，简要介绍一下线性回归，首先指定一个模型将因变量 $y$ 和特征联系起来，对线性模型而言，依赖函数的形式如下："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$y = w_0 + \\sum_{i=1}^m w_i x_i$$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果为每项观测加上一个虚维度 $x_0 = 1$（比如偏置），那么就可以把 $w_0$ 整合进求和项中，改写为一个略微紧凑的形式："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$y = \\sum_{i=0}^m w_i x_i = \\textbf{w}^\\text{T} \\textbf{x}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果有一个特征观测矩阵，其中矩阵的行是数据集中的观测，那么需要在左边加上一列。由此，线性模型可以定义为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\textbf y = \\textbf X \\textbf w + \\epsilon$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- $\\textbf y \\in \\mathbb{R}^n$：因变量（目标变量）。\n",
    "- $w$：模型的参数向量（在机器学习中，这些参数经常被称为权重）。\n",
    "- $\\textbf X$：观测及其特征矩阵，大小为 n 行、m+1 列（包括左侧的虚列），其秩的大小为 $\\text{rank}\\left(\\textbf X\\right) = m + 1 $。\n",
    "- $\\epsilon $：一个变量，用来表示随机、不可预测模型的错误。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述表达式亦可这样写："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ y_i = \\sum_{j=0}^m w_j X_{ij} + \\epsilon_i$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型具有如下限制（否则它就不是线性回归了）："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 随机误差的期望为零：$\\forall i: \\mathbb{E}\\left[\\epsilon_i\\right] = 0 $;\n",
    "- 随机误差具有相同的有限方差，这一性质称为等分散性：$\\forall i: \\text{Var}\\left(\\epsilon_i\\right) = \\sigma^2 < \\infty $;\n",
    "- 随机误差不相关：$\\forall i \\neq j: \\text{Cov}\\left(\\epsilon_i, \\epsilon_j\\right) = 0 $."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "权重 $w_i$ 的估计 $\\widehat{w}_i$  满足如下条件时，称其为线性："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\widehat{w}_i = \\omega_{1i}y_1 + \\omega_{2i}y_2 + \\cdots + \\omega_{ni}y_n$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中对于 $\\forall\\ k\\ $，$\\omega_{ki}$ 仅依赖于 $X$ 中的样本。由于寻求最佳权重的解是一个线性估计，这一模型被称为线性回归。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再引入一项定义：当期望值等于估计参数的真实值时，权重估计被称为无偏（unbiased）："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\mathbb{E}\\left[\\widehat{w}_i\\right] = w_i$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算这些权重的方法之一是普通最小二乘法（OLS）。OLS 可以最小化因变量实际值和模型给出的预测值之间的均方误差："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl}\\mathcal{L}\\left(\\textbf X, \\textbf{y}, \\textbf{w} \\right) &=& \\frac{1}{2n} \\sum_{i=1}^n \\left(y_i - \\textbf{w}^\\text{T} \\textbf{x}_i\\right)^2 \\\\\n",
    "&=& \\frac{1}{2n} \\left\\| \\textbf{y} - \\textbf X \\textbf{w} \\right\\|_2^2 \\\\\n",
    "&=& \\frac{1}{2n} \\left(\\textbf{y} - \\textbf X \\textbf{w}\\right)^\\text{T} \\left(\\textbf{y} - \\textbf X \\textbf{w}\\right)\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了解决这一优化问题，需要计算模型参数的导数。将导数设为零，然后求解关于 $\\textbf w$ 的等式，倘若不熟悉矩阵求导，可以参考下面的 4 个式子："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\begin{array}{rcl} \n",
    "\\frac{\\partial}{\\partial \\textbf{X}} \\textbf{X}^{\\text{T}} \\textbf{A} &=& \\textbf{A} \\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\begin{array}{rcl} \\frac{\\partial}{\\partial \\textbf{X}} \\textbf{X}^{\\text{T}} \\textbf{A} \\textbf{X} &=& \\left(\\textbf{A} + \\textbf{A}^{\\text{T}}\\right)\\textbf{X} \\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\begin{array}{rcl}\\frac{\\partial}{\\partial \\textbf{A}} \\textbf{X}^{\\text{T}} \\textbf{A} \\textbf{y} &=&  \\textbf{X}^{\\text{T}} \\textbf{y} \\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\begin{array}{rcl} \\frac{\\partial}{\\partial \\textbf{X}} \\textbf{A}^{-1} &=& -\\textbf{A}^{-1} \\frac{\\partial \\textbf{A}}{\\partial \\textbf{X}} \\textbf{A}^{-1} \n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在开始计算模型参数的导数："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \\frac{\\partial \\mathcal{L}}{\\partial \\textbf{w}} &=& \\frac{\\partial}{\\partial \\textbf{w}} \\frac{1}{2n} \\left( \\textbf{y}^{\\text{T}} \\textbf{y} -2\\textbf{y}^{\\text{T}} \\textbf{X} \\textbf{w} + \\textbf{w}^{\\text{T}} \\textbf{X}^{\\text{T}} \\textbf{X} \\textbf{w}\\right) \\\\\n",
    "&=& \\frac{1}{2n} \\left(-2 \\textbf{X}^{\\text{T}} \\textbf{y} + 2\\textbf{X}^{\\text{T}} \\textbf{X} \\textbf{w}\\right)\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \\frac{\\partial \\mathcal{L}}{\\partial \\textbf{w}} = 0 &\\Leftrightarrow& \\frac{1}{2n} \\left(-2 \\textbf{X}^{\\text{T}} \\textbf{y} + 2\\textbf{X}^{\\text{T}} \\textbf{X} \\textbf{w}\\right) = 0 \\\\\n",
    "&\\Leftrightarrow& -\\textbf{X}^{\\text{T}} \\textbf{y} + \\textbf{X}^{\\text{T}} \\textbf{X} \\textbf{w} = 0 \\\\\n",
    "&\\Leftrightarrow& \\textbf{X}^{\\text{T}} \\textbf{X} \\textbf{w} = \\textbf{X}^{\\text{T}} \\textbf{y} \\\\\n",
    "&\\Leftrightarrow& \\textbf{w} = \\left(\\textbf{X}^{\\text{T}} \\textbf{X}\\right)^{-1} \\textbf{X}^{\\text{T}} \\textbf{y}\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "基于上述的定义和条件，可以说，根据高斯-马尔可夫定理，模型参数的 OLS 估计是所有线性无偏估计中最优的，即通过 OLS 估计可以获得最低的方差。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有人可能会问，为何选择最小化均方误差而不是其他指标？因为若不选择最小化均方误差，那么就不满足高斯-马尔可夫定理的条件，得到的估计将不再是最佳的线性无偏估计。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最大似然估计是解决线性回归问题一种常用方法，下面介绍它的概念。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最大似然估计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先举一个简单的例子，我们想做一个试验判定人们是否记得简单的甲醇化学式 $CH_3OH$。首先调查了 400 人，发现只有 117 个人记得甲醇的化学式。那么，直接将 $\\frac{117}{400} \\approx 29\\%$ 作为估计下一个受访者知道甲醇化学式的概率是较为合理的。这个直观的估计就是一个最大似然估计。为什么会这么估计呢？回忆下伯努利分布的定义：如果一个随机变量只有两个值（1 和 0，相应的概率为 $\\theta$ 和 $1 - \\theta$），那么该随机变量满足伯努利分布，遵循以下概率分布函数："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ p\\left(\\theta, x\\right) = \\theta^x \\left(1 - \\theta\\right)^\\left(1 - x\\right), x \\in \\left\\{0, 1\\right\\}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这一分布正是我们所需要的，分布参数 $\\theta$ 就是「某个人知道甲醇化学式」的概率估计。在 400 个独立试验中，试验的结果记为 $\\textbf{x} = \\left(x_1, x_2, \\ldots, x_{400}\\right)$。写下数据的似然，即观测的可能性，比如正好观测到 117 个随机变量 $x = 1$ 和 283 个随机变量 $x = 0$ 的可能性："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " $$ p(\\textbf{x}; \\theta) = \\prod_{i=1}^{400} \\theta^{x_i} \\left(1 - \\theta\\right)^{\\left(1 - x_i\\right)} = \\theta^{117} \\left(1 - \\theta\\right)^{283}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着，将最大化这一 $\\theta$ 的表达式。一般而言，为了简化计算，并不最大化似然 $p(\\textbf{x}; \\theta)$，转而最大化其对数（这种变换不影响最终答案）："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\log p(\\textbf{x}; \\theta) = \\log \\prod_{i=1}^{400} \\theta^{x_i} \\left(1 - \\theta\\right)^{\\left(1 - x_i\\right)} = $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$  = \\log \\theta^{117} \\left(1 - \\theta\\right)^{283} =  117 \\log \\theta + 283 \\log \\left(1 - \\theta\\right)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了找到最大化上式的 $\\theta$ 值，将上式对 $\\theta$ 求导，并令其为零，求解所得等式："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$  \\frac{\\partial \\log p(\\textbf{x}; \\theta)}{\\partial \\theta} = \\frac{\\partial}{\\partial \\theta} \\left(117 \\log \\theta + 283 \\log \\left(1 - \\theta\\right)\\right) = \\frac{117}{\\theta} - \\frac{283}{1 - \\theta};$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由上可知，我们的直观估计正好是最大似然估计。现在将这一推理过程应用到线性回归问题上，尝试找出均方误差背后的道理。为此，需要从概率论的角度来看线性回归。我们的模型和之前是一样的："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\textbf y = \\textbf X \\textbf w + \\epsilon$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不过，现在假定随机误差符合均值为零的 [<i class=\"fa fa-external-link-square\" aria-hidden=\"true\"> 正态分布</i>](https://baike.baidu.com/item/正态分布/829892?fr=aladdin)："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\epsilon_i \\sim \\mathcal{N}\\left(0, \\sigma^2\\right)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "据此改写模型："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "y_i &=& \\sum_{j=1}^m w_j X_{ij} + \\epsilon_i \\\\\n",
    "&\\sim& \\sum_{j=1}^m w_j X_{ij} + \\mathcal{N}\\left(0, \\sigma^2\\right) \\\\\n",
    "p\\left(y_i \\mid \\textbf X; \\textbf{w}\\right) &=& \\mathcal{N}\\left(\\sum_{j=1}^m w_j X_{ij}, \\sigma^2\\right)\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于样本是独立抽取的（误差不相关是高斯-马尔可夫定理的条件之一），数据的似然看起来会是密度函数 $p\\left(y_i\\right)$ 的积。转化为对数形式："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\log p\\left(\\textbf{y}\\mid \\textbf X; \\textbf{w}\\right) &=& \\log \\prod_{i=1}^n \\mathcal{N}\\left(\\sum_{j=1}^m w_j X_{ij}, \\sigma^2\\right) \\\\\n",
    "&=& \\sum_{i=1}^n \\log \\mathcal{N}\\left(\\sum_{j=1}^m w_j X_{ij}, \\sigma^2\\right) \\\\\n",
    "&=& -\\frac{n}{2}\\log 2\\pi\\sigma^2 -\\frac{1}{2\\sigma^2} \\sum_{i=1}^n \\left(y_i - \\textbf{w}^\\text{T} \\textbf{x}_i\\right)^2\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "想要找到最大似然假设，即需要最大化表达式 $p\\left(\\textbf{y} \\mid \\textbf X; \\textbf{w}\\right)$ 以得到 $\\textbf{w}_{\\text{ML}}$，这和最大化其对数是一回事。注意，当针对某个参数最大化函数时，可以丢弃所有不依赖这一参数的变量："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\textbf{w}_{\\text{ML}} &=& \\arg \\max_{\\textbf w} p\\left(\\textbf{y}\\mid \\textbf X; \\textbf{w}\\right) = \\arg \\max_{\\textbf w} \\log p\\left(\\textbf{y}\\mid \\textbf X; \\textbf{w}\\right)\\\\\n",
    "&=& \\arg \\max_{\\textbf w} -\\frac{n}{2}\\log 2\\pi\\sigma^2 -\\frac{1}{2\\sigma^2} \\sum_{i=1}^n \\left(y_i - \\textbf{w}^{\\text{T}} \\textbf{x}_i\\right)^2 \\\\\n",
    "&=& \\arg \\max_{\\textbf w} -\\frac{1}{2\\sigma^2} \\sum_{i=1}^n \\left(y_i - \\textbf{w}^{\\text{T}} \\textbf{x}_i\\right)^2 \\\\\n",
    "&=&  \\arg \\min_{\\textbf w} \\mathcal{L}\\left(\\textbf X, \\textbf{y}, \\textbf{w} \\right)\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所以，当测量误差服从正态（高斯）分布的情况下， 最小二乘法等价于极大似然估计。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 偏置-方差分解"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面讨论线性回归预测的误差性质（可以推广到机器学习算法上），上文提到："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 目标变量的真值 $y$ 是确定性函数 $f\\left(\\textbf{x}\\right)$ 和随机误差 $\\epsilon$ 之和：$y = f\\left(\\textbf{x}\\right) + \\epsilon$。\n",
    "- 误差符合均值为零、方差一致的正态分布：$\\epsilon \\sim \\mathcal{N}\\left(0, \\sigma^2\\right)$。\n",
    "- 目标变量的真值亦为正态分布：$y \\sim \\mathcal{N}\\left(f\\left(\\textbf{x}\\right), \\sigma^2\\right)$。\n",
    "- 试图使用一个协变量线性函数逼近一个未知的确定性函数 $f\\left(\\textbf{x}\\right)$，这一协变量线性函数是函数空间中估计函数 $f$ 的一点，即均值和方差的随机变量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因此，点 $\\textbf{x}$ 的误差可分解为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\text{Err}\\left(\\textbf{x}\\right) &=& \\mathbb{E}\\left[\\left(y - \\widehat{f}\\left(\\textbf{x}\\right)\\right)^2\\right] \\\\\n",
    "&=& \\mathbb{E}\\left[y^2\\right] + \\mathbb{E}\\left[\\left(\\widehat{f}\\left(\\textbf{x}\\right)\\right)^2\\right] - 2\\mathbb{E}\\left[y\\widehat{f}\\left(\\textbf{x}\\right)\\right] \\\\\n",
    "&=& \\mathbb{E}\\left[y^2\\right] + \\mathbb{E}\\left[\\widehat{f}^2\\right] - 2\\mathbb{E}\\left[y\\widehat{f}\\right] \\\\\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了简洁，省略函数的参数，分别考虑每个变量。根据公式 $\\text{Var}\\left(z\\right) = \\mathbb{E}\\left[z^2\\right] - \\mathbb{E}\\left[z\\right]^2$ 可以分解前两项为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\mathbb{E}\\left[y^2\\right] &=& \\text{Var}\\left(y\\right) + \\mathbb{E}\\left[y\\right]^2 = \\sigma^2 + f^2\\\\\n",
    "\\mathbb{E}\\left[\\widehat{f}^2\\right] &=& \\text{Var}\\left(\\widehat{f}\\right) + \\mathbb{E}\\left[\\widehat{f}\\right]^2 \\\\\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\text{Var}\\left(y\\right) &=& \\mathbb{E}\\left[\\left(y - \\mathbb{E}\\left[y\\right]\\right)^2\\right] \\\\\n",
    "&=& \\mathbb{E}\\left[\\left(y - f\\right)^2\\right] \\\\\n",
    "&=& \\mathbb{E}\\left[\\left(f + \\epsilon - f\\right)^2\\right] \\\\\n",
    "&=& \\mathbb{E}\\left[\\epsilon^2\\right] = \\sigma^2\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\mathbb{E}[y] = \\mathbb{E}[f + \\epsilon] = \\mathbb{E}[f] + \\mathbb{E}[\\epsilon] = f$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接着处理和的最后一项。由于误差和目标变量相互独立，所以可以将它们分离，写为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\mathbb{E}\\left[y\\widehat{f}\\right] &=& \\mathbb{E}\\left[\\left(f + \\epsilon\\right)\\widehat{f}\\right] \\\\\n",
    "&=& \\mathbb{E}\\left[f\\widehat{f}\\right] + \\mathbb{E}\\left[\\epsilon\\widehat{f}\\right] \\\\\n",
    "&=& f\\mathbb{E}\\left[\\widehat{f}\\right] + \\mathbb{E}\\left[\\epsilon\\right] \\mathbb{E}\\left[\\widehat{f}\\right]  = f\\mathbb{E}\\left[\\widehat{f}\\right]\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后，将上述公式合并为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\text{Err}\\left(\\textbf{x}\\right) &=& \\mathbb{E}\\left[\\left(y - \\widehat{f}\\left(\\textbf{x}\\right)\\right)^2\\right] \\\\\n",
    "&=& \\sigma^2 + f^2 + \\text{Var}\\left(\\widehat{f}\\right) + \\mathbb{E}\\left[\\widehat{f}\\right]^2 - 2f\\mathbb{E}\\left[\\widehat{f}\\right] \\\\\n",
    "&=& \\left(f - \\mathbb{E}\\left[\\widehat{f}\\right]\\right)^2 + \\text{Var}\\left(\\widehat{f}\\right) + \\sigma^2 \\\\\n",
    "&=& \\text{Bias}\\left(\\widehat{f}\\right)^2 + \\text{Var}\\left(\\widehat{f}\\right) + \\sigma^2\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由此，从上等式可知，任何线性模型的预测误差由三部分组成："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 偏差（bias）: $\\text{Bias}\\left(\\widehat{f}\\right)$ 度量了学习算法的期望输出与真实结果的偏离程度, 刻画了算法的拟合能力，偏差偏高表示预测函数与真实结果差异很大。\n",
    "- 方差（variance）: $\\text{Var}\\left(\\widehat{f}\\right)$ 代表「同样大小的不同的训练数据集训练出的模型」与「这些模型的期望输出值」之间的差异。训练集变化导致性能变化，方差偏高表示模型很不稳定。\n",
    "- 不可消除的误差（irremovable error）: $\\sigma^2$ 刻画了当前任务任何算法所能达到的期望泛化误差的下界，即刻画了问题本身的难度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "尽管无法消除 $\\sigma^2$，但我们可以影响前两项。理想情况下，希望同时消除偏差和方差（见下图中左上），但是在实践中，常常需要在偏置和不稳定（高方差）间寻找平衡。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"https://doc.shiyanlou.com/courses/uid214893-20190505-1557025218835\" width=\"400\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一般而言，当模型的计算量增加时（例如，自由参数的数量增加了），估计的方差（分散程度）也会增加，但偏置会下降，这可能会导致过拟合现象。另一方面，如果模型的计算量太少（例如，自由参数过低)，这可能会导致欠拟合现象。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"https://doc.shiyanlou.com/courses/uid214893-20190505-1557025236837\" width=\"480\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "高斯-马尔可夫定理表明：在线性模型参数估计问题中，OLS 估计是最佳的线性无偏估计。这意味着，如果存在任何无偏线性模型 g，可以确信 $Var\\left(\\widehat{f}\\right) \\leq Var\\left(g\\right)$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性回归的正则化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "低偏置和低方差往往是不可兼得的，所以在一些情形下，会为了稳定性（降低模型的方差）而导致模型的偏置 $\\text{Var}\\left(\\widehat{f}\\right)$ 提高。高斯-马尔可夫定理成立的条件之一就是矩阵 $\\textbf{X}$ 是满秩的，否则 OLS 的解 $\\textbf{w} = \\left(\\textbf{X}^\\text{T} \\textbf{X}\\right)^{-1} \\textbf{X}^\\text{T} \\textbf{y}$ 就不存在，因为逆矩阵 $\\left(\\textbf{X}^\\text{T} \\textbf{X}\\right)^{-1}$ 不存在，此时矩阵 $\\textbf{X}^\\text{T} \\textbf{X}$ 被称为奇异矩阵或退化矩阵。这类问题被称为病态问题，必须加以矫正，也就是说，矩阵 $\\textbf{X}^\\text{T} \\textbf{X}$ 需要变成非奇异矩阵（这正是这一过程叫做正则化的原因）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们常常能在这类数据中观察到所谓的多重共线性：两个或更多特征高度相关，也就是矩阵 $\\textbf{X}$ 的列之间存在类似线性依赖的关系（又不完全是线性依赖）。例如，在「基于特征预测房价」这一问题中，属性「含阳台的面积」和「不含阳台的面积」会有一个接近线性依赖的关系。数学上，包含这类数据的矩阵 $\\textbf{X}^\\text{T} \\textbf{X}$ 被称为可逆矩阵，但由于多重共线性，一些本征值（特征值）会接近零。在 $\\textbf{X}^\\text{T} \\textbf{X}$ 的逆矩阵中，因为其本征值为 $\\frac{1}{\\lambda_i}$，所以有些本征值会变得特别大。本征值这种巨大的数值波动会导致模型参数估计的不稳定，即在训练数据中加入一组新的观测会导致完全不同的解。为了解决上述问题，有一种正则化的方法称为吉洪诺夫（Tikhonov）正则化，大致上是在均方误差中加上一个新变量："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \\mathcal{L}\\left(\\textbf{X}, \\textbf{y}, \\textbf{w} \\right) &=& \\frac{1}{2n} \\left\\| \\textbf{y} - \\textbf{X} \\textbf{w} \\right\\|_2^2 + \\left\\| \\Gamma \\textbf{w}\\right\\|^2\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "吉洪诺夫矩阵常常表达为单位矩阵乘上一个系数：$\\Gamma = \\frac{\\lambda}{2} E$。在这一情形下，最小化均方误差问题变为一个 L2 正则化问题。若对新的损失函数求导，设所得函数为零，据  $\\textbf{w}$ 重整等式，便得到了这一问题的解："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\begin{array}{rcl} \n",
    "\\textbf{w} &=& \\left(\\textbf{X}^{\\text{T}} \\textbf{X} + \\lambda \\textbf{E}\\right)^{-1} \\textbf{X}^{\\text{T}} \\textbf{y}\n",
    "\\end{array}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这类回归被称为岭回归（ridge regression）。岭为对角矩阵，在 $\\textbf{X}^\\text{T} \\textbf{X}$ 矩阵上加上这一对角矩阵，以确保能得到一个正则矩阵。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='500px;' src=\"https://doc.shiyanlou.com/courses/uid214893-20190505-1557025255573\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这样的解降低了方差，但增加了偏置，因为参数的正则向量也被最小化了，这导致解朝零移动。在下图中，OLS 解为白色虚线的交点，蓝点表示岭回归的不同解。可以看到，通过增加正则化参数 $\\lambda$，使解朝零移动。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='400px;' src=\"https://doc.shiyanlou.com/courses/uid214893-20190505-1557025274374\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性分类器背后的基本思路是，目标分类的值可以被特征空间中的一个超平面分开。如果这可以无误差地达成，那么训练集被称为线性可分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='300px;' src=\"https://doc.shiyanlou.com/courses/uid214893-20190505-1557025292722\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上面已经介绍了线性回归和普通最小二乘法（OLS）。现在考虑一个二元分类问题，将目标分类记为「+1」（正面样本）和「-1」（负面样本）。最简单的线性分类器可以通过回归定义："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ a(\\textbf{x}) = \\text{sign}(\\textbf{w}^\\text{T}\\textbf x)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " - $\\textbf{x}$ 是特征向量（包括标识）。\n",
    " - $\\textbf{w}$ 是线性模型中的权重向量（偏置为 $w_0$）。\n",
    " - $\\text{sign}(\\bullet)$ 是符号函数，返回参数的符号。\n",
    " - $a(\\textbf{x})$ 是分类 $\\textbf{x}$ 的分类器。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于逻辑回归的线性分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "逻辑回归是线性分类器的一个特殊情形，但逻辑回归有一个额外的优点：它可以预测样本 $\\textbf{x}_\\text{i}$ 为分类「+」的概率 $p_+$："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ p_+ = P\\left(y_i = 1 \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right) $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "逻辑回归不仅能够预测样本是「+1」还是「-1」，还能预测其分别是「+1」和「-1」的概率是多少。对于很多业务问题（比如，信用评分问题）而言，这是一个非常重要的优点。下面是一个预测贷款违约概率的例子。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='300px;' src='https://doc.shiyanlou.com/courses/uid214893-20190505-1557025438757'>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "银行选择一个阈值 $p_*$ 以预测贷款违约的概率（上图中阈值为0.15），超过阈值就不批准贷款。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了预测概率 $p_+ \\in [0,1]$，使用 OLS 构造线性预测："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$b(\\textbf{x}) = \\textbf{w}^\\text{T} \\textbf{x} \\in \\mathbb{R}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了将所得结果转换为 [0,1] 区间内的概率，逻辑回归使用下列函数进行转换： "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\sigma(z) = \\frac{1}{1 + \\exp^{-z}}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 Matplotlib 库画出上面这个函数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "%matplotlib inline\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Sigmoid function')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def sigma(z):\n",
    "    return 1.0 / (1 + np.exp(-z))\n",
    "\n",
    "\n",
    "xx = np.linspace(-10, 10, 1000)\n",
    "plt.plot(xx, [sigma(x) for x in xx])\n",
    "plt.xlabel(\"z\")\n",
    "plt.ylabel(\"sigmoid(z)\")\n",
    "plt.title(\"Sigmoid function\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "事件 $X$ 的概率记为 $P(X)$，则比值比 $OR(X)$ 由式 $\\frac{P(X)}{1-P(X)}$ 决定，比值比是某一事件是否发生的概率之比。显然，概率和比值比包含同样的信息，不过 $P(X)$ 的范围是 0 到 1，而 $OR(X)$ 的范围是 0 到 $\\infty$。如果计算 $OR(X)$ 的对数，那么显然有 $\\log{OR(X)} \\in \\mathbb{R}$，这在 OLS 中有用到。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "让我们看看逻辑回归是如何做出预测的："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$p_+ = P\\left(y_i = 1 \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在，假设已经通过某种方式得到了权重 $\\textbf{w}$，即模型已经训练好了，逻辑回归预测的步骤如下："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "步骤一 计算："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$w_{0}+w_{1}x_1 + w_{2}x_2 + ... = \\textbf{w}^\\text{T}\\textbf{x}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "等式 $\\textbf{w}^\\text{T}\\textbf{x} = 0$ 定义了一个超空间将样本分为两类。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "步骤二 计算对数比值比 $OR_{+}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\log(OR_{+}) = \\textbf{w}^\\text{T}\\textbf{x}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "步骤三 现在已经有了将一个样本分配到「+」分类的概率 $OR_{+}$，可以据此计算 $p_{+}$："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ p_{+} = \\frac{OR_{+}}{1 + OR_{+}} = \\frac{\\exp^{\\textbf{w}^\\text{T}\\textbf{x}}}{1 + \\exp^{\\textbf{w}^\\text{T}\\textbf{x}}} = \\frac{1}{1 + \\exp^{-\\textbf{w}^\\text{T}\\textbf{x}}} = \\sigma(\\textbf{w}^\\text{T}\\textbf{x})$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上式的右边就是 sigmoid 函数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所以，逻辑回归预测一个样本分配为「+」分类的概率（假定已知模型的特征和权重），这一预测过程是通过对权重向量和特征向量的线性组合进行 sigmoid 变换完成的，公式如下："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ p_+(\\textbf{x}_\\text{i}) = P\\left(y_i = 1 \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right) = \\sigma(\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}). $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面介绍模型是如何被训练的，我们将再次通过最大似然估计训练模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最大似然估计和逻辑回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在，看下从最大似然估计（MLE）出发如何进行逻辑回归优化，也就是最小化逻辑损失函数。前面已经见过了将样本分配为「+」分类的逻辑回归模型："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ p_+(\\textbf{x}_\\text{i}) = P\\left(y_i = 1 \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right) = \\sigma(\\textbf{w}^T\\textbf{x}_\\text{i})$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "「-」分类相应的表达式为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ p_-(\\textbf{x}_\\text{i})  = P\\left(y_i = -1 \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right)  = 1 - \\sigma(\\textbf{w}^T\\textbf{x}_\\text{i}) = \\sigma(-\\textbf{w}^T\\textbf{x}_\\text{i}) $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这两个表达式可以组合成一个："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ P\\left(y = y_i \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right) = \\sigma(y_i\\textbf{w}^T\\textbf{x}_\\text{i})$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "表达式 $M(\\textbf{x}_\\text{i}) = y_i\\textbf{w}^T\\textbf{x}_\\text{i}$ 称为目标 $\\textbf{x}_\\text{i}$ 的分类边缘。如果边缘非负，则模型正确选择了目标 $\\textbf{x}_\\text{i}$ 的分类；如果边缘为负，则目标  $\\textbf{x}_\\text{i}$ 被错误分类了。注意，边缘仅针对训练集中的目标（即标签 $y_i$ 已知的目标）而言。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了准确地理解为何有这一结论，需要理解向线性分类器的几何解释。首先，看下线性代数的一个经典入门问题「找出向径 $\\textbf{x}_A$ 与平面 $\\textbf{w}^\\text{T}\\textbf{x} = 0$ 的距离」，即："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "$$\\rho(\\textbf{x}_A, \\textbf{w}^\\text{T}\\textbf{x} = 0) = \\frac{\\textbf{w}^\\text{T}\\textbf{x}_A}{||\\textbf{w}||}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答案："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='500px;' src='https://doc.shiyanlou.com/courses/uid214893-20190505-1557025468696'>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从答案中，可以看到，表达式 $\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}$ 的绝对值越大，点 $\\textbf{x}_\\text{i}$ 离平面 $\\textbf{w}^\\text{T}\\textbf{x} = 0$ 的距离就越远。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因此，表达式 $M(\\textbf{x}_\\text{i}) = y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}$ 是模型对目标 $\\textbf{x}_\\text{i}$ 分类的肯定程度："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 如果边缘的绝对值较大，且为正值，那么分类的标签是正确的，且目标离分界超平面很远，也就是模型对这一分类很肯定。如下图点 $x_3$ 所示。\n",
    "- 如果边缘的绝对值较大，且为负值，那么分类的标签是错误的，且目标离分界超平面很远，那么目标很可能是一个异常值（例如，它可能为训练集中一个错误标记的值）。如下图点 $x_1$ 所示。\n",
    "- 如果边缘绝对值较小，那么目标距离分界超平面很近，其符号就决定了目标「是否被正确分类」。如下图点 $x_2$ 和 $x_4$ 所示。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='500px;' src='https://doc.shiyanlou.com/courses/uid214893-20190505-1557025484745'>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在，计算数据集的似然，即基于数据集 $\\textbf{x}$ 观测到给定向量 $\\textbf{y}$ 的概率。假设目标来自一个独立分布，然后可建立如下公式："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ P\\left(\\textbf{y} \\mid \\textbf{X}, \\textbf{w}\\right) = \\prod_{i=1}^{\\ell} P\\left(y = y_i \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right),$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中，$\\ell$ 为数据集 $\\textbf{X}$ 的长度（行数）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对这个表达式取对数，简化计算："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\log P\\left(\\textbf{y} \\mid \\textbf{X}, \\textbf{w}\\right) = \\log \\prod_{i=1}^{\\ell} P\\left(y = y_i \\mid \\textbf{x}_\\text{i}, \\textbf{w}\\right) = \\log \\prod_{i=1}^{\\ell} \\sigma(y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i})   = $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$  = \\sum_{i=1}^{\\ell} \\log \\sigma(y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}) = \\sum_{i=1}^{\\ell} \\log \\frac{1}{1 + \\exp^{-y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}}} = - \\sum_{i=1}^{\\ell} \\log (1 + \\exp^{-y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}})$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最大化似然等价于最小化以下表达式："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\mathcal{L_{\\log}} (\\textbf X, \\textbf{y}, \\textbf{w}) = \\sum_{i=1}^{\\ell} \\log (1 + \\exp^{-y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}}).$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上式就是逻辑损失函数。用分类边缘 $M(\\textbf{x}_\\text{i})$ 改写逻辑损失函数，有 $L(M) = \\log (1 + \\exp^{-M})$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将这一函数的图像和 0-1 损失函数的图像绘制在一张图上。当错误分类发生时，0-1 损失函数只会以恒定的数值 1.0 惩罚模型，即 $L_{1/0}(M) = [M < 0]$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='500px;' src='https://doc.shiyanlou.com/courses/uid214893-20190505-1557025510180'>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图体现了这样一个想法：如果不能够直接最小化分类问题的误差数量（至少无法通过梯度方法最小化，因为 0-1 损失函数在 0 的导数趋向无穷），那么可以转而最小化它的上界。对逻辑损失函数而言，以下公式是成立的："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\mathcal{L_{1/0}} (\\textbf X, \\textbf{y}, \\textbf{w}) = \\sum_{i=1}^{\\ell} [M(\\textbf{x}_\\text{i}) < 0] \\leq \\sum_{i=1}^{\\ell} \\log (1 + \\exp^{-y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}}) = \\mathcal{L_{\\log}} (\\textbf X, \\textbf{y}, \\textbf{w}), $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中 $\\mathcal{L_{1/0}} (\\textbf X, \\textbf{y})$ 只是数据集$（\\textbf X, \\textbf{y}）$ 上权重 $\\textbf{w}$ 的逻辑回归误差。因此，可以通过降低分类误差数 $\\mathcal{L_{log}}$ 的上限，降低分数误差数本身。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逻辑回归的 $L_2$ 正则化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "逻辑回归的 L2 正则化和岭回归的情况基本一样。代替 $\\mathcal{L_{\\log}} (\\textbf X, \\textbf{y}, \\textbf{w})$，只用最小化下式："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\mathcal{J}(\\textbf X, \\textbf{y}, \\textbf{w}) = \\mathcal{L_{\\log}} (\\textbf X, \\textbf{y}, \\textbf{w}) + \\lambda |\\textbf{w}|^2$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在逻辑回归中，通常使用正则化系数的倒数 $C = \\frac{1}{\\lambda}$："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\widehat{\\textbf w}  = \\arg \\min_{\\textbf{w}} \\mathcal{J}(\\textbf X, \\textbf{y}, \\textbf{w}) =  \\arg \\min_{\\textbf{w}}\\ (C\\sum_{i=1}^{\\ell} \\log (1 + \\exp^{-y_i\\textbf{w}^\\text{T}\\textbf{x}_\\text{i}})+ |\\textbf{w}|^2)$$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面通过一个例子直观地理解正则化。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逻辑回归正则化示例"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "正则化是如何影响分类质量的呢？我们使用吴恩达机器学习课程中的「微芯片测试」数据集，运用基于多项式特征的逻辑回归方法，然后改变正则化参数 $C$。首先，看看正则化是如何影响分类器的分界，并查看欠拟合和过拟合的情况。接着，将通过交叉验证和网格搜索方法来选择接近最优值的正则化参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.linear_model import LogisticRegression, LogisticRegressionCV\n",
    "from sklearn.model_selection import (GridSearchCV, StratifiedKFold,\n",
    "                                     cross_val_score)\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 Pandas 库的 `read_csv()` 方法加载数据。这个数据集内有 118 个微芯片（目标），其中有两项质量控制测试的结果（两个数值变量）和微芯片是否投产的信息。变量已经过归一化，即列中的值已经减去其均值。所以，微芯片的平均测试值为零。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 118 entries, 0 to 117\n",
      "Data columns (total 3 columns):\n",
      "test1       118 non-null float64\n",
      "test2       118 non-null float64\n",
      "released    118 non-null int64\n",
      "dtypes: float64(2), int64(1)\n",
      "memory usage: 2.8 KB\n"
     ]
    }
   ],
   "source": [
    "# 读取数据集\n",
    "data = pd.read_csv(\n",
    "    \"../../data/microchip_tests.txt\", header=None, names=(\"test1\", \"test2\", \"released\")\n",
    ")\n",
    "# 查看数据集的一些信息\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看开始五行和最后五行的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>test1</th>\n",
       "      <th>test2</th>\n",
       "      <th>released</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.051267</td>\n",
       "      <td>0.69956</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.092742</td>\n",
       "      <td>0.68494</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.213710</td>\n",
       "      <td>0.69225</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.375000</td>\n",
       "      <td>0.50219</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.513250</td>\n",
       "      <td>0.46564</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      test1    test2  released\n",
       "0  0.051267  0.69956         1\n",
       "1 -0.092742  0.68494         1\n",
       "2 -0.213710  0.69225         1\n",
       "3 -0.375000  0.50219         1\n",
       "4 -0.513250  0.46564         1"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>test1</th>\n",
       "      <th>test2</th>\n",
       "      <th>released</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>-0.720620</td>\n",
       "      <td>0.538740</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>114</th>\n",
       "      <td>-0.593890</td>\n",
       "      <td>0.494880</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>115</th>\n",
       "      <td>-0.484450</td>\n",
       "      <td>0.999270</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>-0.006336</td>\n",
       "      <td>0.999270</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>0.632650</td>\n",
       "      <td>-0.030612</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        test1     test2  released\n",
       "113 -0.720620  0.538740         0\n",
       "114 -0.593890  0.494880         0\n",
       "115 -0.484450  0.999270         0\n",
       "116 -0.006336  0.999270         0\n",
       "117  0.632650 -0.030612         0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分离训练集和目标分类标签。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data.iloc[:, :2].values\n",
    "y = data.iloc[:, 2].values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制数据，橙点对应有缺陷的芯片，蓝点对应正常芯片。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fd917ecc2e8>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[y == 1, 0], X[y == 1, 1], c=\"blue\", label=\"Released\")\n",
    "plt.scatter(X[y == 0, 0], X[y == 0, 1], c=\"orange\", label=\"Faulty\")\n",
    "plt.xlabel(\"Test 1\")\n",
    "plt.ylabel(\"Test 2\")\n",
    "plt.title(\"2 tests of microchips. Logit with C=1\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义一个函数来显示分类器的分界线。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_boundary(clf, X, y, grid_step=0.01, poly_featurizer=None):\n",
    "    x_min, x_max = X[:, 0].min() - 0.1, X[:, 0].max() + 0.1\n",
    "    y_min, y_max = X[:, 1].min() - 0.1, X[:, 1].max() + 0.1\n",
    "    xx, yy = np.meshgrid(\n",
    "        np.arange(x_min, x_max, grid_step), np.arange(y_min, y_max, grid_step)\n",
    "    )\n",
    "\n",
    "    # 在 [x_min, m_max]x[y_min, y_max] 的每一点都用它自己的颜色来对应\n",
    "    Z = clf.predict(poly_featurizer.transform(np.c_[xx.ravel(), yy.ravel()]))\n",
    "    Z = Z.reshape(xx.shape)\n",
    "    plt.contour(xx, yy, Z, cmap=plt.cm.Paired)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为两个变量 $x_1$ 和 $x_2$ 定义如下多形式特征："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\{x_1^d, x_1^{d-1}x_2, \\ldots x_2^d\\} =  \\{x_1^ix_2^j\\}_{i+j=d, i,j \\in \\mathbb{N}}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "例如，$d=3$ 时的特征如下："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ 1, x_1, x_2,  x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "特征的数量会呈指数型增长，为 100 个变量创建 d 较大（例如 $d=10$）的多项式特征会导致计算成本变得很高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 sklearn 库来实现逻辑回归。创建一个对象，为矩阵 $X$ 加上多项式特征（$d$ 不超过7）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "poly = PolynomialFeatures(degree=7)\n",
    "X_poly = poly.fit_transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(118, 36)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_poly.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练逻辑回归模型，正则化系数 $C = 10^{-2}$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on training set: 0.627\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "C = 1e-2\n",
    "logit = LogisticRegression(C=C, random_state=17)\n",
    "logit.fit(X_poly, y)\n",
    "\n",
    "plot_boundary(logit, X, y, grid_step=0.01, poly_featurizer=poly)\n",
    "\n",
    "plt.scatter(X[y == 1, 0], X[y == 1, 1], c=\"blue\", label=\"Released\")\n",
    "plt.scatter(X[y == 0, 0], X[y == 0, 1], c=\"orange\", label=\"Faulty\")\n",
    "plt.xlabel(\"Test 1\")\n",
    "plt.ylabel(\"Test 2\")\n",
    "plt.title(\"2 tests of microchips. Logit with C=%s\" % C)\n",
    "plt.legend()\n",
    "\n",
    "print(\"Accuracy on training set:\", round(logit.score(X_poly, y), 3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以尝试减小正则化，即把 $C$ 增加到 1，现在的模型权重可以比之前有更大的值（绝对值更大），这使得分类器在训练集上的精确度提高到 0.831。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on training set: 0.831\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "C = 1\n",
    "logit = LogisticRegression(C=C, random_state=17)\n",
    "logit.fit(X_poly, y)\n",
    "\n",
    "plot_boundary(logit, X, y, grid_step=0.005, poly_featurizer=poly)\n",
    "\n",
    "plt.scatter(X[y == 1, 0], X[y == 1, 1], c=\"blue\", label=\"Released\")\n",
    "plt.scatter(X[y == 0, 0], X[y == 0, 1], c=\"orange\", label=\"Faulty\")\n",
    "plt.xlabel(\"Test 1\")\n",
    "plt.ylabel(\"Test 2\")\n",
    "plt.title(\"2 tests of microchips. Logit with C=%s\" % C)\n",
    "plt.legend()\n",
    "\n",
    "print(\"Accuracy on training set:\", round(logit.score(X_poly, y), 3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "倘若继续增加 $C$ 到 10000 会如何？看下面结果，很明显正则化不够强导致了过拟合现象。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on training set: 0.873\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "C = 1e4\n",
    "logit = LogisticRegression(C=C, random_state=17)\n",
    "logit.fit(X_poly, y)\n",
    "\n",
    "plot_boundary(logit, X, y, grid_step=0.005, poly_featurizer=poly)\n",
    "\n",
    "plt.scatter(X[y == 1, 0], X[y == 1, 1], c=\"blue\", label=\"Released\")\n",
    "plt.scatter(X[y == 0, 0], X[y == 0, 1], c=\"orange\", label=\"Faulty\")\n",
    "plt.xlabel(\"Test 1\")\n",
    "plt.ylabel(\"Test 2\")\n",
    "plt.title(\"2 tests of microchips. Logit with C=%s\" % C)\n",
    "plt.legend()\n",
    "\n",
    "print(\"Accuracy on training set:\", round(logit.score(X_poly, y), 3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了讨论上述的这些结果，改写一下逻辑回归的优化函数："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ J(X,y,w) = \\mathcal{L} + \\frac{1}{C}||w||^2,$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "- $\\mathcal{L}$ 是对整个数据集的总逻辑损失函数\n",
    "- $C$ 是反向正则化系数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "总结："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 参数 $C$ 越大，模型中可恢复的数据之间的关系就越复杂（直观地说，$C$ 对应模型的「复杂度」：模型能力）。\n",
    "- 如果正则化过强，即 $C$ 值很小，最小化逻辑损失函数问题的解（权重）可能过小或为零。这样的模型对误差的「惩罚」也不够（即在上面的函数 $J(X,y,w)$ 中，权重的平方和过高，导致误差 $L$ 较大）。在这一情形下，模型将会欠拟合。\n",
    "- 如果正则化过弱，即 $C$ 值很大，最小化逻辑损失函数问题的解可能权重过大。在这一情形下， $L$ 对函数 $J(X,y,w)$ 贡献较大，导致过拟合。\n",
    "- $C$ 是一个超参数，逻辑回归不会自动学习调整 $C$ 的值，我们可以通过交叉验证来人工选择较好的 $C$ 值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化参数的调整"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对上述例子中正则化参数 $C$ 进行调参。使用 `LogisticRegressionCV()` 方法进行网格搜索参数后再交叉验证，`LogisticRegressionCV()` 是专门为逻辑回归设计的。如果想对其他模型进行同样的操作，可以使用 `GridSearchCV()` 或 `RandomizedSearchCV()` 等超参数优化算法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 2 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done   5 out of   5 | elapsed:    5.1s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=array([3.16958e-02, 1.00463e-01, 3.18424e-01, 1.00927e+00, 3.19897e+00,\n",
       "       1.01394e+01, 3.21376e+01, 1.01863e+02]),\n",
       "           class_weight=None,\n",
       "           cv=StratifiedKFold(n_splits=5, random_state=17, shuffle=True),\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='warn', n_jobs=-1, penalty='l2',\n",
       "           random_state=None, refit=True, scoring=None, solver='lbfgs',\n",
       "           tol=0.0001, verbose=1)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 该单元格执行时间较长，请耐心等待\n",
    "skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)\n",
    "# 下方结尾的切片为了在线上环境搜索更快，线下练习时可以删除\n",
    "c_values = np.logspace(-2, 3, 500)[50:450:50]\n",
    "\n",
    "logit_searcher = LogisticRegressionCV(Cs=c_values, cv=skf, verbose=1, n_jobs=-1)\n",
    "logit_searcher.fit(X_poly, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([10.13939458])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logit_searcher.C_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看超参数 $C$ 是如何影响模型的质量的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Mean CV-accuracy')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XuYVXd97/H3Z24MtxkgkAsDBJIQcyEmqSNN1NR7xdqGenoeA7ZVe+yhPjXRxtqe2IuNse1prW2Mxzy2NEYTq1CaEy22KCZGq54mCmmIXGICIReGxIAmMJkAc9vf88daM2w2+wbM2nvYfF7Ps5+Z9dtr7f3drOH33b/LWj9FBGZmZuU01TsAMzMb/5wszMysIicLMzOryMnCzMwqcrIwM7OKnCzMzKwiJwszM6vIycLMzCpysjAzs4pa6h3AWJk5c2bMnz+/3mGYmZ1UHnzwwZ9GxKxK+zVMspg/fz4bN26sdxhmZicVSU9Vs5+7oczMrCInCzMzq8jJwszMKnKyMDOzipwszMysIicLMzOryMnCzMwqapjrLE42uVzwtR89Q1//EJd0dXL+GVNpb22ud1hmZkU5WdTBj3/Sy0fu3sxDT+8bLWtpEuefMZVFXR1c0tXJxV2dXHhmBxPbnEDMGl3/0DAvHhpKH4P0Hkx+vnhoiN5Dg/QeOrydXz5yzMvOmMqqFVdkGqOTRQ0dGBjilm9t57bvPUHnxFZuvuZSus+ewZbd+9m8ez9bnunl3kf2sGZjDwDNTeK8WVO4OE0gi7o6ueisDiZP8GkzGy+GhnOjlXZSsR+uxHsPHlnBv9hfmAiSYwaGchXfZ8qEFqa2jzxamTVlAufMnMLU9hbOnTUl88/pWqdGvv3oHv70q1voeeEg13TP5Ya3XsD0yW0AzJ0xibdechYAEcGz+w+xefd+tqYJ5Hvbf8rd/7UbAAnOmTmZRV2dSQtkdicXd3XQ0d5at89mdrIazgV9R3xLL/zWXvjtPq8sTQQHB4crvs/E1ubRir5jYiudk9qYM2MSHWnFP/JzapHtjvZWprS30NykGvyLlOZkkbE9vYf42L9t499/9CznnT6FNb9zJYsXzCi5vyRmT5vI7GkTecvFZx7xOpt372fL7l42797PD594nn/d9Mzo8/NPm8SitPWxaHYni7o6mDapLdPPZlZPuVzw0sDQkd03ed/YC7tzinXf9PUPVXyftpYmOtJKe6QyP7Oj/Yjt/EQwtWDfqe0ttDaf/HOJMk0WkpYAtwDNwG0R8VcFz88D7gCmpfvcEBHr0uc+ArwXGAY+EBHrs4x1rOVywZd++DSf+PqP6R/O8eFfPJ8Vv3AubS3H90dzekc7b+xo540XnjFa9tO+frbs3s/WZ3rZ3LOfTbv28W8/enb0+TnTJ452XyVJpIPTpkw44c9mdqIigoODw6OV+P4jKvWRCn2Qwn78I77x9w8RUf59Wpo0WoFPbW9h6oRWFsycfNS3+MLKPf+YCS0eNwRQVPrXPt4XlpqBx4A3Az3ABmB5RGzL22cl8FBEfFbSRcC6iJif/r4KWAzMBu4Fzo+Iku297u7uGC93nd32TC9/9JXNbNq1j9ecN5M//9VFzJ85uSbv/cJLA0ny2L2fLc8kXVlP/uzA6PNndbaPtj4umdPBotmdnN7RXpPYrHEcSiv6o7pr8vroe0tU/L2HBuk7NMRQrnzd0ySKds10FHyLL71PK+2tTUj17b4Z7yQ9GBHdlfbLsmWxGNgRETvTgFYDS4FtefsE0JH+3gmM9KssBVZHRD/whKQd6evdn2G8J+zAwBC33Lud277/BNMmtvKpay5j6WWza/rHOn1yG69ZOJPXLJw5Wrb/4CDbnullS5pANu/ez72PPDf6rez0qROOaH0s6urkrM52/ydrUANDuaO/tRf0yR/RfdNfmAiGGBiuPCA7dcKRlfoZHe2cd/rR3+JH9insp5/U1uy/wXEky2TRBezK2+4Bfr5gnxuBb0q6DpgMvCnv2AcKju3KJsyx8e0f7+FPvrqF3fsOsuyVyQD2eBkz6JzYypXnnsaV5542WtbXP3Q4gaRJ5DuP7mHky95pk9u4uKuTS7o60jGQTuZMn+j/vHU2NJyjrz9v5k1Bn/yRUyyLT7s8NFi5op/c1nxEZT59Uhtnnzb5cOVeZFA2PzFMaWuhqc4Dsja26j3AvRz4QkT8raQrgS9KWlTtwZJWACsA5s2bl1GI5T3Xe4ibvraNf99c3QD2eDFlQguLF8w4ItaDA8Nse7aXrc/sZ3NPMhPrH/5j52h3QefEVhZ1dRzuxurqZN6MSa4UqpTLBX0DxadU9hYZfE32ObLiPzBQeeZNe2vTEd/QO9pbmDNt4hEV/VHdNxMPl0+Z0EJLAwzI2tjKMlnsBubmbc9Jy/K9F1gCEBH3S2oHZlZ5LBGxElgJyZjFmEVeheFc8KUfPMXffOPRMRnAHg8mtjXzirOn84qzp4+WHRoc5tGfvMiWZ9IWyO5ePv/9J0e7IaZOaOGi2R1HDKQvmDm57tP8xlpEcGBg+Ig++t6CrpmS0y7TffoGKg/ItjU3HTXAevrU9qJ99Ed/u09+P5n/Bm38yjJZbAAWSlpAUtEvA95ZsM/TwBuBL0i6EGgH9gJrgS9L+juSAe6FwA8zjPWYbH1mP3/0lS08vGsfVy2cyceX1m4Au9baW5u5dO40Lp07bbRsYCjHY8+9mDcG0sudDzw1emHRpLZmLp7dwcVp99UlXZ2cO2ty3b6tRgSHBnNHdNMUvSL2YMG0y7zn+vqHGK4wINvcpKMq77kzJo1+Y+/I+xZ/VPdN+tO3fLHxKrNkERFDkq4F1pNMi709IrZKugnYGBFrgd8H/lHS9SSD3e+JZHrWVklrSAbDh4D3l5sJVSsHBob41L3b+dz3n2D6pFZuWXYZV19a2wHs8aCtpWm0FTFicDjH43v72Nyzf3Q21j9v2MUX/vNJIOkaufCsjtHuq4u7Olh4+tSqvgXn3wqhWPdNYcXfe/DwoOxI2eBw5Zk3yRWyh/veu6a1M7V9akH3TelB2YmtHpC1xpXZ1Nlay3rq7INPvcAHVj3E7n0HWb54Lv9ryfgZwB6vhnPBzr19aRdWkkC2PdM7eiFUW3MTF5w1lQvPTCbElbpq9lhuhdBR0CVT+C2+2Jz6qe0tTPaArJ2ixsPU2YYxOJzjQ2s2AfAv77uSV84f/wPY40Fzk1h4xlQWnjGVt1+elOVywZM/e4kteTOx7n3kOVqaNVp5d05qY+6MSUfMqR+t+Ce0HpUIpkyo/60QzBqdk0UV1mzcxVM/O8Dt7+l2ojhBTU3inFlTOGfWFK6+dHa9wzGzKnnaRAUHB4a55d7tdJ89nde/7PR6h2NmVhdOFhXccf+T7Hmxnz9ccoEHL83slOVkUcb+g4N89juP87qXzTopLrQzM8uKk0UZK7/7OPsPDvIHb3lZvUMxM6srJ4sS9rx4iNu//yS/culsLp7dWfkAM7MG5mRRwq337WBgOMeH3nx+vUMxM6s7J4sidj1/gC//8Gne0T2XBQ16Gw8zs2PhZFHEzfc8RpPEB9+4sN6hmJmNC04WBR79yYt8ZdNu3vOq+ZzZ6RXkzMzAyeIon/zmo0xpa+F9rz233qGYmY0bThZ5el44wD3bnuO9Vy1g+mTfJNDMbISTRZ59BwYBuPCsjgp7mpmdWpws8vSnt8Ke4JXGzMyO4FoxT/9Qsr7ShBavVmZmls/JIs9oy6LV/yxmZvlcK+bpH3Q3lJlZMa4V87gbysysOCeLPB7gNjMrzrViHo9ZmJkV51oxT/+gu6HMzIrJNFlIWiLpUUk7JN1Q5PmbJW1KH49J2pf33CckbZX0iKRPqwZrmrobysysuJasXlhSM3Ar8GagB9ggaW1EbBvZJyKuz9v/OuDy9PdXAa8GXp4+/X3gtcB3sooXnCzMzErJslZcDOyIiJ0RMQCsBpaW2X85sCr9PYB2oA2YALQCz2UYK5DMhmpraaIGjRgzs5NKlsmiC9iVt92Tlh1F0tnAAuA+gIi4H/g28Gz6WB8Rj2QYKwADQzm3KszMihgvNeMy4K6IGAaQdB5wITCHJMG8QdJVhQdJWiFpo6SNe/fuPeEg+odyHtw2Mysiy2SxG5ibtz0nLStmGYe7oADeDjwQEX0R0Qd8Hbiy8KCIWBkR3RHRPWvWrBMOuH/QLQszs2KyrBk3AAslLZDURpIQ1hbuJOkCYDpwf17x08BrJbVIaiUZ3M68G6p/aNjXWJiZFZFZzRgRQ8C1wHqSin5NRGyVdJOkq/N2XQasjojIK7sLeBzYDDwMPBwRX8sq1hHuhjIzKy6zqbMAEbEOWFdQ9tGC7RuLHDcM/E6WsRXT7wFuM7OiXDPm6R8cdrIwMyvCNWOe/qEcE1rdDWVmVsjJIo+7oczMinPNmKd/yN1QZmbFuGbM0z+Yo83JwszsKK4Z83jqrJlZcU4WedwNZWZWnGvGPMlsKP+TmJkVcs2Yioj0rrPuhjIzK+RkkfLCR2ZmpVWsGSVdJ2l6LYKpJycLM7PSqqkZzyBZEnVNuqZ2Qy4j1z80DOAruM3MiqiYLCLiT4CFwOeA9wDbJf2lpHMzjq2m+gfdsjAzK6WqmjG9ffhP0scQyfoTd0n6RIax1ZS7oczMSqt4i3JJHwTeBfwUuA34g4gYlNQEbAf+MNsQa2O0G8qzoczMjlLNehYzgP8WEU/lF0ZETtIvZxNW7Y22LHydhZnZUaqpGb8OPD+yIalD0s8DRETmS53WiscszMxKq6Zm/CzQl7fdl5Y1FHdDmZmVVk2yUP762BGRI+PlWOvBA9xmZqVVUzPulPQBSa3p44PAzqwDq7WBNFm0e8zCzOwo1dSM7wNeBewGeoCfB1ZkGVQ9HG5ZuBvKzKxQxe6kiNgDLKtBLHV1eMzCLQszs0LVXGfRDrwXuBhoHymPiP9RxbFLgFuAZuC2iPirgudvBl6fbk4CTo+Iaelz80iu65gLBPBLEfFk5Y90fA7PhnLLwsysUDVfo78InAm8BfgPYA7wYqWDJDUDtwJvBS4Clku6KH+fiLg+Ii6LiMuA/wPcnff0ncDfRMSFwGJgTxWxHjdfZ2FmVlo1NeN5EfGnwEsRcQfwNpJxi0oWAzsiYmdEDACrgaVl9l8OrAJIk0pLRNwDEBF9EXGgivc8biPdUG3NThZmZoWqqRkH05/7JC0COoHTqziuC9iVt92Tlh1F0tnAAuC+tOj89P3ulvSQpL9JWyqZ6R/K0dbcRFNTQ95U18zshFSTLFam61n8CbAW2Ab89RjHsQy4KyKG0+0W4Crgw8ArgXNI7nh7BEkrJG2UtHHv3r0nFED/YM6D22ZmJZStHdObBfZGxAsR8d2IOCciTo+If6jitXeTDE6PmJOWFbOMtAsq1QNsSruwhoCvAj9XeFBErIyI7ojonjVrVhUhldY/NOzxCjOzEsrWjunV2sd7V9kNwEJJCyS1kSSEtYU7SbqA5Jbn9xccO03SSAZ4A0mLJjP9Xn/bzKykar5K3yvpw5LmSpox8qh0UNoiuBZYDzwCrImIrZJuknR13q7LgNUFtxQZJumC+pakzYCAfzyGz3XMkmThloWZWTHV3OPpmvTn+/PKgmQcoayIWAesKyj7aMH2jSWOvQd4eRXxjYn+wWHanCzMzIqq5gruBbUIpN76h3Jef9vMrIRqruB+V7HyiLhz7MOpn/6hYXdDmZmVUE031Cvzfm8H3gj8F8kV1g2jfyjHlAkNd+d1M7MxUU031HX525KmkVyN3VD6B3OcNtktCzOzYo6ndnyJ5GrrhpJ0Q3nMwsysmGrGLL5GMvsJkuRyEbAmy6DqwVNnzcxKq6aT/pN5vw8BT0VET0bx1E0yG8rJwsysmGqSxdPAsxFxCEDSREnzs1xboh76B90NZWZWSjVfpf8FyOVtD6dlDcXdUGZmpVVTO7ak61EAkP7ell1ItRcRThZmZmVUUzvuzb+Xk6SlwE+zC6n2BoZHVslzN5SZWTHVjFm8D/iSpM+k2z1A0au6T1ajS6q6ZWFmVlQ1F+U9DlwhaUq63Zd5VDU24GRhZlZWxdpR0l9Kmpaug90nabqkP69FcLVyuGXhbigzs2Kq+Sr91ojYN7IRES8Av5RdSLXXP5is5urrLMzMiqumdmyWNGFkQ9JEYEKZ/U86HrMwMyuvmgHuL5GsWPf5dPu3gDuyC6n23A1lZlZeNQPcfy3pRyS3Jgf4eESszzas2hpKp842N6nOkZiZjU9VLeAQEV8Hvp5xLHWTS2+T6GRhZlZcNbOhrpC0QVKfpAFJw5J6axFcreQiyRZyrjAzK6qaEd3PAMuB7cBE4LeBW7MMqtZGkkWTs4WZWVFVTf+JiB1Ac0QMR8TngSXZhlVbaa7AqcLMrLhqksUBSW3AJkmfkHR9lcchaYmkRyXtkHRDkedvlrQpfTwmaV/B8x2SevJuNZKJkWTR5DELM7Oiqhng/k2S5HAtcD0wF/i1SgdJaibprnozyf2kNkhaGxHbRvaJiOvz9r8OuLzgZT4OfLeKGE/I4W6orN/JzOzkVLGFEBFPRcShiOgFvhYRH0q7pSpZDOyIiJ3pbc1XA0vL7L8cWDWyIekVwBnAN6t4rxNyeIDb2cLMrJhjvWT5tmPYtwvYlbfdk5YdRdLZwALgvnS7Cfhb4MPHGN9x8ZiFmVl5x5ossqpPlwF3RcRwuv27wLpKa31LWiFpo6SNe/fuPe4392woM7PyqrooL8/HjmHf3STjGyPmpGXFLAPen7d9JXCVpN8FpgBtkvoi4ohB8ohYCawE6O7ujmOI7QijA9xOFmZmRZVMFpK2AV8GVqVrWhARXz2G194ALJS0gCRJLAPeWeR9LgCmA/ePlEXEr+c9/x6guzBRjCVflGdmVl65bqjlwGTgm5J+KOl6SbOrfeGIGCKZQbUeeARYExFbJd2Uv0wrSRJZHRHH3TI4UTm3LMzMyirZsoiIh4GHgY9IugK4BnhA0uPAlyPiHyu9eESsA9YVlH20YPvGCq/xBeALld7rRIRbFmZmZVV7BfcD6TUR7wKmkdwCpGGMNGncsjAzK67iALekV5J0Sf0a8ATwD8C/ZBxXTfmiPDOz8soNcP8lSdfT8yQX1L260lTWk9XImIUvyjMzK65cy+IQsCQittcqmHoJtyzMzMoqN2bxBHBFYaGk35R01BTYk5lv92FmVl65ZHEt8JUi5XcDv59NOPVx+KK8+sZhZjZelUsWrRHRV1gYES8BrdmFVHu+zsLMrLxyyWKipMmFhZKmAm3ZhVR7voLbzKy8csnic8Bd6R1hAZA0n2Rm1OeyDau2wmMWZmZllbuC+5OS+oDvSpqSFvcBfxURn61JdDWS85iFmVlZZS/Ki4i/B/4+7XoiIl6sSVQ15rvOmpmVV9Utyhs1SYzwmIWZWXnHuvhRQwovfmRmVpaTBXm3+6hvGGZm41ZV3VCSXgXMz98/Iu7MKKaac8vCzKy8au46+0XgXGATMLJGdgANkyx8UZ6ZWXnVtCy6gYvquZJd1kYHuN0pZ2ZWVDXV4xbgzKwDqSdPnTUzK6+alsVMYJukHwL9I4URcXXpQ04uoy2LOsdhZjZeVZMsbsw6iHrzsqpmZuVVTBYR8R+1CKSefFGemVl5FccsJF0haYOkPkkDkoYl9dYiuFrxmIWZWXnVDHB/BlgObAcmAr8N3FrNi0taIulRSTsk3VDk+ZslbUofj0nal5ZfJul+SVsl/UjSNdV/pGOXy3lZVTOzcqq9N9QOSc0RMQx8XtJDwEfKHSOpmSSpvBnoATZIWhsR2/Je9/q8/a8DLk83DwDviojtkmYDD0paHxH7juXDVWv0Cm63LMzMiqomWRyQ1AZskvQJ4Fmqa5EsBnZExE4ASauBpcC2EvsvB/4MICIeGymMiGck7QFmAZkki8AtCzOzcqqp9H8z3e9a4CVgLvBrVRzXBezK2+5Jy46SLrC0ALivyHOLSVbme7yK9zwublmYmZVXzWyopyRNBM6KiI9lFMcy4K60m2uUpLOALwLvjohc4UGSVgArAObNm3fcbx4RblWYmZVRzWyoXyG5L9Q30u3LJK2t4rV3k7RCRsxJy4pZBqwqeN8O4N+BP46IB4odFBErI6I7IrpnzZpVRUjF5SLcqjAzK6OabqgbScYf9gFExCaSLqNKNgALJS1IxzyWAUclGUkXANOB+/PK2oCvAHdGxF1VvNcJifB4hZlZOdUki8GI2F9QVvGmghExRDLOsR54BFgTEVsl3SQp/1Yhy4DVBTcqfAfwC8B78qbWXlZFrMclFx6vMDMrp5rZUFslvRNolrQQ+ADwn9W8eESsA9YVlH20YPvGIsf9E/BP1bzHWPCYhZlZedW0LK4DLia5ieAqoBf4vSyDqrVchK/eNjMro5rZUAeAP04fDSkXvuOsmVk5JZNFpRlPjXSL8mSA2+nCzKyUci2LK0kuqlsF/IAG/vKdTJ2tdxRmZuNXuWRxJsl9nZYD7yS55mFVRGytRWC1FBE0eYTbzKykkgPcETEcEd+IiHcDVwA7gO9IurZm0dVIzt1QZmZllR3gljQBeBtJ62I+8GmSi+UaSi6icfvYzMzGQLkB7juBRSTXSXwsIrbULKoaC3xRnplZOeVaFr9BcpfZDwIfyKtMBUREdGQcW834ojwzs/JKJouIqOaCvYaQy3nMwsysnFMmIZTjqbNmZuU5WZCMWbhlYWZWmpMFblmYmVXiZIFv92FmVomTBSN3na13FGZm45eTBV78yMysEicLkussnCvMzEpzssBjFmZmlThZ4DELM7NKnCzwsqpmZpU4WZAMcJuZWWlOFnjMwsyskkyThaQlkh6VtEPSDUWev1nSpvTxmKR9ec+9W9L29PHuLONMVsrL8h3MzE5uZRc/OhGSmoFbSZZm7QE2SFobEdtG9omI6/P2vw64PP19BvBnQDfJrZseTI99IYtYPWZhZlZelt+nFwM7ImJnRAwAq4GlZfZfDqxKf38LcE9EPJ8miHuAJVkFmgu8Up6ZWRlZJosuYFfedk9adhRJZwMLgPuO9dix4JXyzMzKGy899cuAuyJi+FgOkrRC0kZJG/fu3Xvcb+6V8szMyssyWewG5uZtz0nLilnG4S6oqo+NiJUR0R0R3bNmzTruQD1mYWZWXpbJYgOwUNICSW0kCWFt4U6SLgCmA/fnFa8HflHSdEnTgV9MyzLhZVXNzMrLbDZURAxJupakkm8Gbo+IrZJuAjZGxEjiWAasjojIO/Z5SR8nSTgAN0XE81nFmguPcJuZlZNZsgCIiHXAuoKyjxZs31ji2NuB2zMLLv+9wGMWZmZljJcB7roKj1mYmZXlZEFynYWThZlZaU4WJGMWzhVmZqU5WeBlVc3MKnGyAPBFeWZmZTlZ4DELM7NKnCzwsqpmZpU4WTCyUp6zhZlZKU4W+EaCZmaVOFngZVXNzCpxsiAds/C/hJlZSa4iGbkozy0LM7NSnCxIuqGcKszMSnOyYOSus04XZmalOFng6yzMzCpxssDLqpqZVeJkQbKsqgctzMxKc7IgaVm0uB/KzKwkJwtgKBc0+0ILM7OSXEMCwzm3LMzMynGyAIaGczQ7WZiZleRkgVsWZmaVZJosJC2R9KikHZJuKLHPOyRtk7RV0pfzyj+Rlj0i6dPK8H4cQ7mgudnJwsyslJasXlhSM3Ar8GagB9ggaW1EbMvbZyHwEeDVEfGCpNPT8lcBrwZenu76feC1wHeyiNUtCzOz8rJsWSwGdkTEzogYAFYDSwv2+Z/ArRHxAkBE7EnLA2gH2oAJQCvwXBZBRoRnQ5mZVZBlDdkF7Mrb7knL8p0PnC/p/0l6QNISgIi4H/g28Gz6WB8Rj2QRZLJKHm5ZmJmVkVk31DG8/0LgdcAc4LuSLgFmAhemZQD3SLoqIr6Xf7CkFcAKgHnz5h1XAIPDOQDPhjIzKyPLlsVuYG7e9py0LF8PsDYiBiPiCeAxkuTxduCBiOiLiD7g68CVhW8QESsjojsiumfNmnVcQQ6nTQu3LMzMSssyWWwAFkpaIKkNWAasLdjnqyStCiTNJOmW2gk8DbxWUoukVpLB7Uy6oYZGkkWzxyzMzErJrIaMiCHgWmA9SUW/JiK2SrpJ0tXpbuuBn0naRjJG8QcR8TPgLuBxYDPwMPBwRHwtizjdsjAzqyzTMYuIWAesKyj7aN7vAXwofeTvMwz8TpaxjWhuEm+75Czmz5xci7czMzsp1XuAu+46J7Zy66//XL3DMDMb19xRb2ZmFTlZmJlZRU4WZmZWkZOFmZlV5GRhZmYVOVmYmVlFThZmZlaRk4WZmVWk5CLqk5+kvcBTJ/ASM4GfjlE4492p9FnBn7fRnUqfN4vPenZEVLwTa8MkixMlaWNEdNc7jlo4lT4r+PM2ulPp89bzs7obyszMKnKyMDOzipwsDltZ7wBq6FT6rODP2+hOpc9bt8/qMQszM6vILQszM6volE8WkpZIelTSDkk31DuesSZprqRvS9omaaukD6blMyTdI2l7+nN6vWMdK5KaJT0k6d/S7QWSfpCe439Ol/ltCJKmSbpL0o8lPSLpygY/t9enf8dbJK2S1N5I51fS7ZL2SNqSV1b0fCrx6fRz/0hSpgvznNLJQlIzcCvwVuAiYLmki+ob1ZgbAn4/Ii4CrgDen37GG4BvRcRC4FvpdqP4IEeu2f7XwM0RcR7wAvDeukSVjVuAb0TEBcClJJ+7Ic+tpC7gA0B3RCwCmoFlNNb5/QKwpKCs1Pl8K7AwfawAPptlYKd0sgAWAzsiYmdEDACrgaV1jmlMRcSzEfFf6e8vklQmXSSf8450tzuAX61PhGNL0hzgbcBt6baAN5Cs6w6N9Vk7gV8APgcQEQMRsY8GPbepFmCipBZgEvAsDXR+I+K7wPMFxaXO51Lgzkg8AEyTdFZWsZ3qyaIL2JW33ZOWNSRJ84HLgR8AZ0TEs+lTPwHOqFNYY+1TwB8CuXT7NGBfRAyl2410jhcAe4HPp91ut0maTIOe24jYDXwSeJokSewHHqRxz++IUuezpvXXqZ4sThmSpgD/F/i9iOjNfy6SKXEn/bQ4Sb8M7ImIB+sdS420AD8HfDYiLgdeoqDLqVHOLUDaV7+UJElX4ZGlAAACXklEQVTOBiZzdJdNQ6vn+TzVk8VuYG7e9py0rKFIaiVJFF+KiLvT4udGmqzpzz31im8MvRq4WtKTJF2KbyDp05+WdltAY53jHqAnIn6Qbt9Fkjwa8dwCvAl4IiL2RsQgcDfJOW/U8zui1Pmsaf11qieLDcDCdDZFG8lg2do6xzSm0j77zwGPRMTf5T21Fnh3+vu7gX+tdWxjLSI+EhFzImI+ybm8LyJ+Hfg28N/T3RriswJExE+AXZJelha9EdhGA57b1NPAFZImpX/XI5+3Ic9vnlLncy3wrnRW1BXA/rzuqjF3yl+UJ+mXSPq5m4HbI+Iv6hzSmJL0GuB7wGYO9+P/Ecm4xRpgHsndet8REYUDayctSa8DPhwRvyzpHJKWxgzgIeA3IqK/nvGNFUmXkQzmtwE7gd8i+RLYkOdW0seAa0hm+T0E/DZJP31DnF9Jq4DXkdxd9jngz4CvUuR8pgnzMyRdcQeA34qIjZnFdqonCzMzq+xU74YyM7MqOFmYmVlFThZmZlaRk4WZmVXkZGFmZhU5WZhlSNKZklZLelzSg5LWSTq/3nGZHauWyruY2fFI58F/BbgjIpalZZeS3NvnsXrGZnasnCzMsvN6YDAi/n6kICIermM8ZsfN3VBm2VlEcldUs5Oek4WZmVXkZGGWna3AK+odhNlYcLIwy859wARJK0YKJL1c0lV1jMnsuDhZmGUkXajm7cCb0qmzW4H/TbLamdlJxXedNTOzityyMDOzipwszMysIicLMzOryMnCzMwqcrIwM7OKnCzMzKwiJwszM6vIycLMzCr6/+8cadxNlyTdAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(c_values, np.mean(logit_searcher.scores_[1], axis=0))\n",
    "plt.xlabel(\"C\")\n",
    "plt.ylabel(\"Mean CV-accuracy\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后，选择 $C$ 值「最佳」的区域，即在 Mean CV-accuracy 值达到较大值的前提下选择较小的 $C$。上图由于 $C$ 过大，无法辨认具体哪个较小的 $C$ 达到了较好的 Mean CV-accuracy 值，可以仅画出 $C$ 为 0 到 10 时的验证曲线。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 10)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xt4HXd95/H3x7ralhzbsSM7vsSGyLmSCwiTkFJoQ6i5xe12FxxaCl262W5JoFnYbtjt0jTdp0spLdtus9A03Avxk83SVqEGkxIoS5sUO2CR2I4vMbnY8i2RHOsSWbfv/nFG1vGxLZ1jndFIR5/X8+iRZs7MOV+fJ5nPzO83v98oIjAzMyvWrKwLMDOz6cXBYWZmJXFwmJlZSRwcZmZWEgeHmZmVxMFhZmYlcXCYmVlJHBxmZlYSB4eZmZWkOusCymXRokWxatWqrMswM5tWHn/88RciYnEp+1RMcKxatYqtW7dmXYaZ2bQi6dlS93FTlZmZlcTBYWZmJXFwmJlZSRwcZmZWEgeHmZmVxMFhZmYlcXCYmVlJKmYch5mZjS0ieHlgiO6+QbpODNLdN3hO7+PgMDOb4iKCvoFhuk4M5A76fYN0n8j/nVvffWKQ48nv7r6Bk9uMbNd9YpCh4ZhwPQ4OM7OURAQnBodPO8B3jRz0Rw7uJ5dHDvqDHE9eG1keLOKAX1c9i8b6ahrra2ioq6ahrpoVC+fk1tVV01BfTUNdTbJN7vU3/1Hp/y4Hh5lZgZED/shBu6tv8LSz/dGz+YGC7Qbpztu2mAN+bfUsGuuSg3l93gG/bnS5sb6GhpEAyNu2MQmCuXXV1FZPTre1g8PMKsqJwaGzN+eM1bxzSiAMMDBUxAG/atYpB/uGumqWzZ9NY31jwcF99CA/GgS5MJhbV0VdddUkfDPlk2pwSFoH/BlQBdwXEZ8oeH0l8CVgfrLNnRGxKXntY8AHgCHgQxGxOc1azSxb/ckZflffQMFBv7B55wxn+3mv9Q8Nj/tZNVU6pTmnsb6aC+fX55bzmnpGm3QKl3PbTbcDfrmkFhySqoB7gJuA/cAWSa0RsSNvs98FHoiIz0i6HNgErEr+3gBcAVwI/IOkNRExlFa9ZnZuBoaGz9qc03WyCWcgr+0+CYOC5p3+wfEP+NWzdEoTTUN9NUvm1ScH+9H2+5Nn+3WnNueMnO3X18zMA365pHnFsRbYGxH7ACRtBNYD+cERwLzk7/OA9uTv9cDGiDgB/FTS3uT9Hk2xXrMZZeSAX0xzzmmdt3lXBieKOOBXjRzwk7b6xrpqLmis55WL8w/ueZ26+ct5QVBXPQtJk/Dt2FjSDI5lwPN5y/uB1xVscxfwbUm3A3OBN+ft+1jBvsvSKdNsehkcGj7l4H7G5p2zNOfkn/H3DRR3wM8/e2+sr2ZRQy2rF83NO7iPHPxzB/15+W3+9dXMq6/xAb/CZN05fgvwxYj4E0nXA1+RdGWxO0u6FbgVYOXKlSmVaFYeQ8ORnL0PnHKAL2zOKTz7P+Vunb5BXh4Yv8V2ljilnb6hrprz59Zy0flzR9vqT7ljp+BsP2neqa/xAd9Ol2ZwHABW5C0vT9bl+wCwDiAiHpVUDywqcl8i4l7gXoCWlpaJj2oxO4Oh4TjljL2rb+DkQXys5pyugjt3evuLO+A31J3aObtgbu3ovfh5Hbq5s/mk4zYJgJGz/dk1VT7gW2rSDI4tQLOk1eQO+huA9xRs8xxwI/BFSZcB9cBRoBX4mqQ/Jdc53gz8MMVarQINDwfd/ace4Aubc07rvD3Dvfk9RRzwNXLAz7srZ/7sGpYvmJ0c3EcP8Kef7Y926M6p9QHfpr7UgiMiBiXdBmwmd6vt5yNiu6S7ga0R0Qp8BPgrSXeQ6yh/f0QEsF3SA+Q60geBD/qOqpljeDjo6c8/iJ96tn+2ztz87UZCYDwSNNRW592VU8282TXJvfijZ/a5s/nCe/BHw2BOTRWzZvmAbzODcsfp6a+lpSW2bt2adRl2Fl19A+w+3M2ew13se6GHl3oHztic0903SHf/IMX8Z1l4y+XJg/tpbfdnPttvrK/xAd9mPEmPR0RLKftk3TluFaa3f5A9h7vZfbgr+cmFRftLfSe3qauexYI5tacc3JeeV3+yOadwkFVhJ29jfTVza6t9wDfLiIPDzknfwBB7j3SfEg67Dnexv/Plk9vUVs/i4sUNrF29kOamRi5pamRNUyPLF8z2Qd9sGnNw2JhODA6x72gPuw93sedwN7sOd7HncBfPdfQyMndbTZV4xaIGrl25gHe3rKC5qZE1TQ1cdP5cqhwQZhXHwWFAbhTxMy/0sDsvHHYf7uKZF3tPzt9fNUusXjSXyy+cx/prlnHJktGAqKnywyTNZgoHxwwzODTMsx29STCM9kX89IWek7OBzhJcdP5cmi9o4G2vWnryCmL1orkzdlI3Mxvl4KhQw8PB8529p4TD7sPdPH20+5TJ5FYunMOapgZuvKyJNU0NrGlq5JWLGzwJnJmdlYNjmosIDhx7+WQwjPRF7DnSdcpcRMvmz6a5qYGfbV508gri4gsamFPr/wTMrDQ+akwTEcGh432jdzAd6mL3kW72Hu46ZWTzknn1NDc18Cuvu+jkFURzU+6hMmZm5eCjyRQTERztPpG7g+lQF3uOjF5JdPWNjoRe1FDHmqYG/k3LCtYkVxDNFzRy3pyaDKs3s5nAwZGhF7tP5K4gjiR9EIe62X2ki2O9Aye3WTCnhjVNjfziNcty4ZCMhVg4tzbDys1sJnNwTIKXegfYfTIcuk6GxQvd/Se3mVdfzZqmRt565VLWNDVwSdLEtKih1pPemdmU4uAoo4hg2/PHcv0PSTjsOtTFka4TJ7dpqKvm4gsauPHSJpqTPog1TY00zatzQJjZtODgKKP//b2n+ePNuwCYXVNFc1MDb2henOukXpILiAvPq3dAmNm05uAok4jg/h8+x9rVC/nUv77a8zGZWcXyPBFl8qPnjrG/82Xe1bKClefPcWiYWcVycJRJ67YD1FbP4heuaMq6FDOzVDk4ymBwaJi/f+IgN156AY31HkdhZpXNwVEGj+57kRe6+7n56guzLsXMLHUOjjJo3dZOQ101P3fpBVmXYmaWOgfHBJ0YHOJb2w/xliuaPKOsmc0IDo4J+t6uo3T1DbqZysxmDAfHBLW2tbNwbi03XLwo61LMzCZFqsEhaZ2kXZL2SrrzDK9/WtK25Ge3pGN5r31S0nZJOyX9uabgcOueE4N8Z+dh3vaqJX50qpnNGKmNHJdUBdwD3ATsB7ZIao2IHSPbRMQdedvfDlyb/P164AbgquTlHwBvBL6XVr3n4uEdh+kbGObmq5dlXYqZ2aRJ8zR5LbA3IvZFRD+wEVg/xva3APcnfwdQD9QCdUANcDjFWs9Ja1s7S8+rp+WiBVmXYmY2adIMjmXA83nL+5N1p5F0EbAaeAQgIh4FvgscTH42R8TOFGstWWdPP9/ffZSbr77Q04uY2YwyVRrmNwAPRsQQgKSLgcuA5eTC5uclvaFwJ0m3StoqaevRo0cnteBNTx5kcDh4p++mMrMZJs3gOACsyFtenqw7kw2MNlMB/BLwWER0R0Q38E3g+sKdIuLeiGiJiJbFixeXqezitG5r5xWL53LFhfMm9XPNzLKWZnBsAZolrZZUSy4cWgs3knQpsAB4NG/1c8AbJVVLqiHXMT5lmqoOvdTHD5/p4OarL/SzNcxsxkktOCJiELgN2EzuoP9ARGyXdLekm/M23QBsjIjIW/cg8DTwBNAGtEXEQ2nVWqpv/KSdCDzoz8xmpFQf5BQRm4BNBes+XrB81xn2GwL+fZq1TURrWztXLpvHKxY3ZF2Kmdmkmyqd49PGT1/o4Sf7X/LVhpnNWA6OEj3U1g7AO65ycJjZzOTgKEFE0NrWztpVC7lw/uysyzEzy4SDowQ7D3ax90g3N1/jqw0zm7kcHCX4u7YDVM8Sb3vV0qxLMTPLjIOjSMPDwTfaDvIzzYtYOLc263LMzDLj4CjSj57r5MCxl303lZnNeA6OIrW2tVNXPYu3XLEk61LMzDLl4CjC4NAwm544yI2XXUBDXapjJs3MpjwHRxH++ekXeaG7381UZmYUERySbpc0o59U1NrWTmNdNW+65IKsSzEzy1wxVxxN5B77+kDyDPEZNR1s38AQm588xFuuWEJ9TVXW5ZiZZW7c4IiI3wWagc8B7wf2SPpDSa9MubYp4Xu7jtJ1YtCD/szMEkX1cSRTnh9KfgbJPT/jQUmfTLG2KeGhtnbOn1vLDa88P+tSzMymhGL6OD4s6XHgk8A/Aa+KiP8AvAb45ZTry1RX3wD/sPMwb79qKdVVvo/AzAyKex7HQuBfRcSz+SsjYljSO9Ipa2p4eMdhTgwO+24qM7M8xZxGfxPoGFmQNE/S6wAiYso8zjUNrW3tLJs/m1evnNE3lZmZnaKY4PgM0J233J2sq2gdPf38YM8LvOPqpcyaNaNuJDMzG1MxwaH854FHxDApP3J2Ktj0xEEGh8PNVGZmBYoJjn2SPiSpJvn5MLAv7cKy1trWzisXz+XypfOyLsXMbEopJjh+E3g9cADYD7wOuDXNorJ28KWX2fJMBzdfvYwZNt7RzGxc4zY5RcQRYMMk1DJlfKPtIBF40J+Z2RmMGxyS6oEPAFcA9SPrI+LfFrHvOuDPgCrgvoj4RMHrnwZ+LlmcA1wQEfOT11YC9wErgADeFhHPjP9PmrjWtnZetew8Vi+aOxkfZ2Y2rRTTVPUVYAnwC8A/AsuBrvF2klQF3AO8FbgcuEXS5fnbRMQdEXFNRFwD/C/g63kvfxn444i4DFgLHCmi1gnbd7SbJw68xHpfbZiZnVExwXFxRPw3oCcivgS8nVw/x3jWAnsjYl9E9AMbgfVjbH8LcD9AEjDVEfEwQER0R0RvEZ85Ya1t7UjwjqscHGZmZ1JMcAwkv49JuhI4DyhmfvFlwPN5y/uTdaeRdBGwGngkWbUm+byvS/qxpD9OrmBSFRG0trWzdtVClpxXP/4OZmYzUDHBcW/yPI7fBVqBHcAflbmODcCDETGULFcDbwA+CrwWeAW5mXlPIelWSVslbT169OiEi9jefpx9R3vcKW5mNoYxg0PSLOB4RHRGxPcj4hURcUFE/GUR732AXMf2iOXJujPZQNJMldgPbEuauQaBvwVeXbhTRNwbES0R0bJ48eIiShrbQ23tVM8Sb7ty6YTfy8ysUo0ZHMko8d85x/feAjRLWi2pllw4tBZuJOlSctO0P1qw73xJI2nw8+SudFIzPBw81NbOG5oXsWBubZofZWY2rRXTVPUPkj4qaYWkhSM/4+2UXCncBmwGdgIPRMR2SXdLujlv0w3AxoJpTYbINVN9R9ITgIC/KuHfVbLHn+uk/aU+N1OZmY2jmDmn3p38/mDeuiDX7zCmiNgEbCpY9/GC5bvOsu/DwFVF1FcWrdvaqauexU2XL5msjzQzm5aKGTm+ejIKydLg0DCbnjjImy9roqGu4udvNDObkGJGjv/amdZHxJfLX042/unpF3mxp9/NVGZmRSjm9Pq1eX/XAzcCPyI3srsitG5rp7G+mjddMvE7s8zMKl0xTVW35y9Lmk9uFHhF6BsYYvP2Q7z1yiXUVac+xtDMbNor5q6qQj3kRnlXhO8+dYTuE4NupjIzK1IxfRwPkbuLCnJBcznwQJpFTabWtnYWNdRy/SvOz7oUM7NpoZg+jk/l/T0IPBsR+1OqZ1J19Q3wnaeOcMtrV1BddS4XX2ZmM08xwfEccDAi+gAkzZa0arKejZGmb28/TP/gsJupzMxKUMxp9v8BhvOWh5J1015rWzvL5s/m1SsXZF2Kmdm0UUxwVCfP0wAg+XvaT+b0YvcJfrD3Bd559YV+rriZWQmKCY6j+XNLSVoPvJBeSZNj05OHGBoObr7azVRmZqUopo/jN4GvSvqLZHk/cMbR5NPJQ9vaab6ggcuWNmZdipnZtFLMAMCngeskNSTL3alXlbL2Yy/zw2c6+MhNa9xMZWZWonGbqiT9oaT5yXO/uyUtkPTfJ6O4tDzU1g7AO91MZWZWsmL6ON4aEcdGFiKiE3hbeiWlr7WtnauXn8eqRXOzLsXMbNopJjiqJNWNLEiaDdSNsf2U9vTRbra3H/fVhpnZOSqmc/yr5J7E94Vk+deBL6VXUroeamtHcjOVmdm5KqZz/I8k/YTcdOoAfxARm9MtKz07Dx7n4sUNNM2rz7oUM7NpqajH3UXEN4FvplzLpOjsGeD8hmk/ftHMLDPF3FV1naQtkrol9UsaknR8MopLQ0dvPwvnOjjMzM5VMZ3jfwHcAuwBZgO/AdyTZlFp6uzpZ8EcB4eZ2bkqai7xiNgLVEXEUER8AViXblnpGB4OOn3FYWY2IcUER6+kWmCbpE9KuqPI/ZC0TtIuSXsl3XmG1z8taVvys1vSsYLX50nanzfdyYQc7xtgOPAVh5nZBBTTOf5eckFxG3AHsAL45fF2klRFrknrJnLzW22R1BoRO0a2iYg78ra/Hbi24G3+APh+ETUW5cWe3CS/vuIwMzt34145RMSzEdEXEceBhyLiPyZNV+NZC+yNiH3JVOwbgfVjbH8LcP/IgqTXAE3At4v4rKJ0JsGxwMFhZnbOSn1e6n0lbLsMeD5veX+y7jSSLgJWA48ky7OAPwE+WmJ9Y+oYueJwU5WZ2TkrNTjSmkp2A/BgRAwly78FbBrv2eaSbpW0VdLWo0ePjvshnb0jVxw1EyzXzGzmKmoAYJ7fL2HbA+T6Q0YsT9adyQbgg3nL1wNvkPRbQANQK6k7Ik7pYI+Ie4F7AVpaWmK8gjp6BgA4f+60nWrLzCxzZw0OSTuArwH3J8/kICL+toT33gI0S1pNLjA2AO85w+dcCiwAHh1ZFxG/kvf6+4GWwtA4F529/dTXzGJ2bdVE38rMbMYaq6nqFmAu8G1JP5R0h6SiZwaMiEFyd2JtBnYCD0TEdkl35z+KllygbIyIca8YJqqjp9/9G2ZmE3TWK46IaAPagI9Jug54N/CYpKeBr0XEX4335hGxCdhUsO7jBct3jfMeXwS+ON5nFaOzp993VJmZTVCxI8cfS8Zc/Bown9w0JNOO56kyM5u4YiY5fK2kP5X0LHAX8JfAtHyYheepMjObuLE6x/+QXPNUB7nBezeMd3vsVPdij684zMwmaqzbcfuAdRGxZ7KKSdPA0DBdfYO+4jAzm6Cxmqp+ClxXuFLSeyWddlvtVDcy+G+hB/+ZmU3IWMFxG/A3Z1j/deAj6ZSTns5k8N9CD/4zM5uQsYKjJiK6C1dGRA8w7U7bO3o83YiZWTmMFRyzJc0tXCmpEZh2HQWjTVXTrnQzsyllrOD4HPBgMnMtAJJWkbvD6nPpllV+nhnXzKw8xho5/ilJ3cD3JTUkq7uBT0TEZyalujIaeRbHfAeHmdmEjDk7bkR8Fvhs0jxFRHRNSlUp6Ojtp7GumtrqUmeSNzOzfEVNqz6dA2OE56kyMyuPGXP6/aKDw8ysLGZMcHT29rNwjm/FNTObqKKaqiS9HliVv31EfDmlmlLR2TPAmqbGrMswM5v2xg0OSV8BXglsA0aeCR7AtAqOjp5+zndTlZnZhBVzxdECXD4ZT+hLy8v9Q7w8MOQ+DjOzMiimj+NJYEnahaTp5Khxj+EwM5uwYq44FgE7JP0QODGyMiJuPvsuU8voPFUODjOziSomOO5Ku4i0eZ4qM7PyGTc4IuIfJ6OQNJ284nBTlZnZhBXzzPHrJG2R1C2pX9KQpOOTUVy5jMxT5SsOM7OJK6Zz/C+AW4A9wGzgN4B7inlzSesk7ZK0V9KdZ3j905K2JT+7JR1L1l8j6VFJ2yX9RNK7i/8nna6jpx8JzpvtAYBmZhNV7FxVeyVVRcQQ8AVJPwY+NtY+kqrIBcxNwH5gi6TWiNiR97535G1/O3BtstgL/FpE7JF0IfC4pM0RcayUf9yIjt5+5s+uoWqWzmV3MzPLU0xw9EqqBbZJ+iRwkOKuVNYCeyNiH4CkjcB6YMdZtr8F+D2AiNg9sjIi2iUdARYD5xQcnT0DvqPKzKxMigmA9ybb3Qb0ACuAXy5iv2XA83nL+5N1p0keFrUaeOQMr60l98TBp4v4zDPyqHEzs/Ip5q6qZyXNBpZGxO+nVMcG4MGkKewkSUuBrwDvi4jhwp0k3QrcCrBy5cqzvnlnbz8rF84pa8FmZjNVMXdVvZPcPFXfSpavkdRaxHsfIHd1MmJ5su5MNgD3F3zuPODvgf8aEY+daaeIuDciWiKiZfHixWctpKOn33dUmZmVSTFNVXeR6684BhAR28g1K41nC9AsaXXSR7IBOC1wJF0KLAAezVtXC/wN8OWIeLCIzzqriKCz18/iMDMrl2KCYyAiXipYN+6EhxExSK5fZDOwE3ggIrZLultS/nQlG4CNBZMovgv4WeD9ebfrXlNErafpPjHIwFB4niozszIp5q6q7ZLeA1RJagY+BPxzMW8eEZuATQXrPl6wfNcZ9vtr4K+L+YzxdPYMAJ6nysysXIq54rgduILcBIf3A8eB306zqHLqODlPlQf/mZmVQzF3VfUC/zX5mXY6enIT+nqeKjOz8jhrcIx359R0mVa9I2mq8l1VZmblMdYVx/XkBvDdD/wLMC3n6+j0szjMzMpqrOBYQm6eqVuA95AbU3F/RGyfjMLKpaO3n5oq0VhX1LRcZmY2jrN2jkfEUER8KyLeB1wH7AW+J+m2SauuDDp7+lkwpxZpWl4wmZlNOWOehkuqA95O7qpjFfDn5AbmTRseNW5mVl5jdY5/GbiS3DiM34+IJyetqjLq7O33HVVmZmU01jiOXwWagQ8D/yzpePLTNZ2eAOgrDjOz8jrrFUdEFDM4cMrr7B1ggQf/mZmVTUWEw9kMDQfHevs9T5WZWRlVdHC89PIAw+ExHGZm5VTRwdHRMzJPlYPDzKxcKjo4OpMJDn1XlZlZ+VR0cPiKw8ys/Co6ODodHGZmZVfRwdHhpiozs7Kr6ODo7Olndk0Vs2ursi7FzKxiVHRwdPQMuJnKzKzMKjo4Onv7PWrczKzMKjo4Ono8waGZWblVfHC4qcrMrLxSDQ5J6yTtkrRX0p1neP3TkrYlP7slHct77X2S9iQ/7zuXz+/0FYeZWdml9jxVSVXAPeQeP7sf2CKpNSJ2jGwTEXfkbX87cG3y90Lg94AWIIDHk307i/38/sFhuk4M+orDzKzM0rziWAvsjYh9EdEPbATWj7H9LcD9yd+/ADwcER1JWDwMrCvlw4/1evCfmVka0gyOZcDzecv7k3WnkXQRsBp4pNR9z6bDwWFmloqp0jm+AXgwIoZK2UnSrZK2Stp69OjRU14bmafKfRxmZuWVZnAcAFbkLS9P1p3JBkabqYreNyLujYiWiGhZvHjxKa919gwAvuIwMyu3NINjC9AsabWkWnLh0Fq4kaRLgQXAo3mrNwNvkbRA0gLgLcm6op2cp8oDAM3Myiq1u6oiYlDSbeQO+FXA5yNiu6S7ga0RMRIiG4CNERF5+3ZI+gNy4QNwd0R0lPL5nW6qMjNLRWrBARARm4BNBes+XrB811n2/Tzw+XP97I6efhrrq6mpmirdOGZmlaFij6oeNW5mlo6KDY7OXo8aNzNLQ8UGR0dPP+f7isPMrOwqNjg6e/pZ4OAwMyu7ig2Ojl73cZiZpaEig+Pl/iH6Bobdx2FmloKKDI7Reao8+M/MrNwqMjg8+M/MLD0VGRwjExy6j8PMrPwqMjg6T85T5eAwMyu3igyOF7uTKw43VZmZlV1FBkdnbz+zBOfNdue4mVm5VWRwdPTkphuZNUtZl2JmVnEqMjg6ez1q3MwsLRUZHB09/e7fMDNLSUUGR2fPgJ/8Z2aWkooMjhf9LA4zs9RUXHB0nxjkhe4TLJs/O+tSzMwqUsUFx65DXQBcumRexpWYmVWmiguOpw4dB+DSpY0ZV2JmVpkqLjh2Heqisa7aTVVmZimpuOB46mAXlyxpRPLgPzOzNKQaHJLWSdolaa+kO8+yzbsk7ZC0XdLX8tZ/Mlm3U9Kfq4gkiAieOnScS5a4mcrMLC3Vab2xpCrgHuAmYD+wRVJrROzI26YZ+BhwQ0R0SrogWf964AbgqmTTHwBvBL431mcefKmP432DXLrUHeNmZmlJ84pjLbA3IvZFRD+wEVhfsM2/A+6JiE6AiDiSrA+gHqgF6oAa4PB4Hzh6R5WvOMzM0pJmcCwDns9b3p+sy7cGWCPpnyQ9JmkdQEQ8CnwXOJj8bI6IneN94M7kjio3VZmZpSe1pqoSPr8ZeBOwHPi+pFcBi4DLknUAD0t6Q0T8v/ydJd0K3AqwcuVKdh3qYtn82cyr93QjZmZpSfOK4wCwIm95ebIu336gNSIGIuKnwG5yQfJLwGMR0R0R3cA3gesLPyAi7o2IlohoWbx4MU8d7HIzlZlZytIMji1As6TVkmqBDUBrwTZ/S+5qA0mLyDVd7QOeA94oqVpSDbmO8TGbqiLg6aPdbqYyM0tZasEREYPAbcBmcgf9ByJiu6S7Jd2cbLYZeFHSDnJ9Gv8pIl4EHgSeBp4A2oC2iHhorM87MTjE4HD4jiozs5QpIrKuoSyuvPra+JmP3sd/fuulrF40N+tyzMymBUmPR0RLKftk3TleNvU1VXz2va/Jugwzs4pXcVOOmJlZuhwcZmZWEgeHmZmVxMFhZmYlcXCYmVlJHBxmZlYSB4eZmZXEwWFmZiWpmJHjkrqAXVnXMUUsAl7Iuogpwt/FKH8Xo/xdjLokIkqa5K9iRo4Du0odNl+pJG31d5Hj72KUv4tR/i5GSdpa6j5uqjIzs5I4OMzMrCSVFBz3Zl3AFOLvYpS/i1H+Lkb5uxhV8ndRMZ3jZmY2OSrpisPMzCZBRQSHpHWSdknaK+nOrOvJiqQVkr4raYek7ZI+nHVNWZNUJenHkr6RdS1ZkjRf0oOSnpK0U9L1WdeUFUl3JP9/PCnpfkn1Wdc0WSR9XtIRSU/mrVso6WFJe5LfC8Z7n2kfHJKqgHuAtwKXA7dIujzbqjIzCHwkIi4HrgM+OIO/ixEfZpzn1c8QfwZ8KyIuBa5mhn4nkpYBHwJaIuJKoArYkG1Vk+o1sDAXAAAC/klEQVSLwLqCdXcC34mIZuA7yfKYpn1wAGuBvRGxLyL6gY3A+oxrykREHIyIHyV/d5E7OCzLtqrsSFoOvB24L+tasiTpPOBngc8BRER/RBzLtqpMVQOzJVUDc4D2jOuZNBHxfaCjYPV64EvJ318CfnG896mE4FgGPJ+3vJ8ZfLAcIWkVcC3wL9lWkqn/CfwOMJx1IRlbDRwFvpA0290naW7WRWUhIg4AnwKeAw4CL0XEt7OtKnNNEXEw+fsQ0DTeDpUQHFZAUgPwf4HfjojjWdeTBUnvAI5ExONZ1zIFVAOvBj4TEdcCPRTRHFGJkvb79eTC9EJgrqRfzbaqqSNyt9mOe6ttJQTHAWBF3vLyZN2MJKmGXGh8NSK+nnU9GboBuFnSM+SaL39e0l9nW1Jm9gP7I2Lk6vNBckEyE70Z+GlEHI2IAeDrwOszrilrhyUtBUh+Hxlvh0oIji1As6TVkmrJdXS1ZlxTJiSJXDv2zoj406zryVJEfCwilkfEKnL/TTwSETPyzDIiDgHPS7okWXUjsCPDkrL0HHCdpDnJ/y83MkNvFMjTCrwv+ft9wN+Nt8O0n+QwIgYl3QZsJneHxOcjYnvGZWXlBuC9wBOStiXr/ktEbMqwJpsabge+mpxc7QN+PeN6MhER/yLpQeBH5O5C/DEzaBS5pPuBNwGLJO0Hfg/4BPCApA8AzwLvGvd9PHLczMxKUQlNVWZmNokcHGZmVhIHh5mZlcTBYWZmJXFwmJlZSRwcZimStETSRklPS3pc0iZJa7Kuy2wipv04DrOpKhlg9jfAlyJiQ7LuanJzAe3OsjaziXBwmKXn54CBiPjsyIqIaMuwHrOycFOVWXquBDzJolUcB4eZmZXEwWGWnu3Aa7IuwqzcHBxm6XkEqJN068gKSVdJekOGNZlNmIPDLCXJQ3F+CXhzcjvuduB/kHvKmtm05dlxzcysJL7iMDOzkjg4zMysJA4OMzMriYPDzMxK4uAwM7OSODjMzKwkDg4zMyuJg8PMzEry/wEsmSvWi8kJAgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(c_values, np.mean(logit_searcher.scores_[1], axis=0))\n",
    "plt.xlabel(\"C\")\n",
    "plt.ylabel(\"Mean CV-accuracy\")\n",
    "plt.xlim((0, 10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图可见，$C=2$ 时就达到了较好的 Mean CV-accuracy 值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### 逻辑回归的优缺点"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过分析 IMDB 影评的二元分类问题和 XOR 问题来简要说明逻辑回归的优缺点。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分析 IMDB 二元分类问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "IMDB 数据集中的训练集包含标记好的影评，其中有 12500 条好评，12500 条差评。使用词袋模型构建输入矩阵 $X$ ，语料库包含所有用户影评，影评的特征将由整个语料库中每个词的出现情况来表示。下图展示了这一思路："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img width='500px;' src=\"https://doc.shiyanlou.com/courses/uid214893-20190505-1557025533901\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn.datasets import load_files\n",
    "from sklearn.feature_extraction.text import CountVectorizer\n",
    "from sklearn.linear_model import LogisticRegression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "载入 IMDB 数据集。首先，我们从实验楼服务器上下载并解压数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 文件较多，请耐心等待解压完成\n",
    "!wget -nc \"../../data/aclImdb_v1.tar.gz\"\n",
    "!tar -zxvf \"aclImdb_v1.tar.gz\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "PATH_TO_IMDB = \"aclImdb/\"\n",
    "reviews_train = load_files(\n",
    "    os.path.join(PATH_TO_IMDB, \"train\"), categories=[\"pos\", \"neg\"]\n",
    ")\n",
    "text_train, y_train = reviews_train.data, reviews_train.target\n",
    "reviews_test = load_files(os.path.join(PATH_TO_IMDB, \"test\"), categories=[\"pos\", \"neg\"])\n",
    "text_test, y_test = reviews_test.data, reviews_test.target"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看看训练集和测试集中各有多少条数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of documents in training data: 25000\n",
      "[12500 12500]\n",
      "Number of documents in test data: 25000\n",
      "[12500 12500]\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of documents in training data: %d\" % len(text_train))\n",
    "print(np.bincount(y_train))\n",
    "print(\"Number of documents in test data: %d\" % len(text_test))\n",
    "print(np.bincount(y_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面是该数据集中的一些影评。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b'Words can\\'t describe how bad this movie is. I can\\'t explain it by writing only. You have too see it for yourself to get at grip of how horrible a movie really can be. Not that I recommend you to do that. There are so many clich\\xc3\\xa9s, mistakes (and all other negative things you can imagine) here that will just make you cry. To start with the technical first, there are a LOT of mistakes regarding the airplane. I won\\'t list them here, but just mention the coloring of the plane. They didn\\'t even manage to show an airliner in the colors of a fictional airline, but instead used a 747 painted in the original Boeing livery. Very bad. The plot is stupid and has been done many times before, only much, much better. There are so many ridiculous moments here that i lost count of it really early. Also, I was on the bad guys\\' side all the time in the movie, because the good guys were so stupid. \"Executive Decision\" should without a doubt be you\\'re choice over this one, even the \"Turbulence\"-movies are better. In fact, every other movie in the world is better than this one.'"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text_train[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看一下上面这条影评是差评还是好评。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train[1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "y_train=0 表示影评是差评，y_train=1 表示影评是好评，上面这条影片是差评。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 单词的简单计数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先，使用 `CountVectorizer()` 创建包含所有单词的字典。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "74849"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cv = CountVectorizer()\n",
    "cv.fit(text_train)\n",
    "\n",
    "len(cv.vocabulary_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看创建后的「单词」样本，发现 IMDB 数据集已经自动进行了文本处理（自动化文本处理不在本实验讨论范围，如果感兴趣可以自行搜索）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['00', '000', '0000000000001', '00001', '00015', '000s', '001', '003830', '006', '007', '0079', '0080', '0083', '0093638', '00am', '00pm', '00s', '01', '01pm', '02', '020410', '029', '03', '04', '041', '05', '050', '06', '06th', '07', '08', '087', '089', '08th', '09', '0f', '0ne', '0r', '0s', '10', '100', '1000', '1000000', '10000000000000', '1000lb', '1000s', '1001', '100b', '100k', '100m']\n",
      "['pincher', 'pinchers', 'pinches', 'pinching', 'pinchot', 'pinciotti', 'pine', 'pineal', 'pineapple', 'pineapples', 'pines', 'pinet', 'pinetrees', 'pineyro', 'pinfall', 'pinfold', 'ping', 'pingo', 'pinhead', 'pinheads', 'pinho', 'pining', 'pinjar', 'pink', 'pinkerton', 'pinkett', 'pinkie', 'pinkins', 'pinkish', 'pinko', 'pinks', 'pinku', 'pinkus', 'pinky', 'pinnacle', 'pinnacles', 'pinned', 'pinning', 'pinnings', 'pinnochio', 'pinnocioesque', 'pino', 'pinocchio', 'pinochet', 'pinochets', 'pinoy', 'pinpoint', 'pinpoints', 'pins', 'pinsent']\n"
     ]
    }
   ],
   "source": [
    "print(cv.get_feature_names()[:50])\n",
    "print(cv.get_feature_names()[50000:50050])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "接着，使用单词的索引编码训练集的句子，用稀疏矩阵保存。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<25000x74849 sparse matrix of type '<class 'numpy.int64'>'\n",
       "\twith 3445861 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train = cv.transform(text_train)\n",
    "X_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "让我们看看上述转换过程是如何进行的，首先查看需要转换的训练集句子。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b'This movie is terrible but it has some good effects.'"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text_train[19726]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后将每个单词转换成对应的单词索引。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 9881, 21020, 28068, 29999, 34585, 34683, 44147, 61617, 66150,\n",
       "       66562], dtype=int32)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train[19726].nonzero()[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32),\n",
       " array([ 9881, 21020, 28068, 29999, 34585, 34683, 44147, 61617, 66150,\n",
       "        66562], dtype=int32))"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train[19726].nonzero()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "接下来，对测试集应用同样的操作。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = cv.transform(text_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "之后就可以使用逻辑回归来训练模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='warn', n_jobs=-1,\n",
       "          penalty='l2', random_state=7, solver='lbfgs', tol=0.0001,\n",
       "          verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logit = LogisticRegression(solver=\"lbfgs\", n_jobs=-1, random_state=7)\n",
    "logit.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练完成后，查看训练集和测试集上的准确率（Accuracy）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.981, 0.864)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(logit.score(X_train, y_train), 3), round(logit.score(X_test, y_test), 3),"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可视化模型的系数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def visualize_coefficients(classifier, feature_names, n_top_features=25):\n",
    "    # get coefficients with large absolute values\n",
    "    coef = classifier.coef_.ravel()\n",
    "    positive_coefficients = np.argsort(coef)[-n_top_features:]\n",
    "    negative_coefficients = np.argsort(coef)[:n_top_features]\n",
    "    interesting_coefficients = np.hstack([negative_coefficients, positive_coefficients])\n",
    "    # plot them\n",
    "    plt.figure(figsize=(15, 5))\n",
    "    colors = [\"red\" if c < 0 else \"blue\" for c in coef[interesting_coefficients]]\n",
    "    plt.bar(np.arange(2 * n_top_features), coef[interesting_coefficients], color=colors)\n",
    "    feature_names = np.array(feature_names)\n",
    "    plt.xticks(\n",
    "        np.arange(1, 1 + 2 * n_top_features),\n",
    "        feature_names[interesting_coefficients],\n",
    "        rotation=60,\n",
    "        ha=\"right\",\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_grid_scores(grid, param_name):\n",
    "    plt.plot(\n",
    "        grid.param_grid[param_name],\n",
    "        grid.cv_results_[\"mean_train_score\"],\n",
    "        color=\"green\",\n",
    "        label=\"train\",\n",
    "    )\n",
    "    plt.plot(\n",
    "        grid.param_grid[param_name],\n",
    "        grid.cv_results_[\"mean_test_score\"],\n",
    "        color=\"red\",\n",
    "        label=\"test\",\n",
    "    )\n",
    "    plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "visualize_coefficients(logit, cv.get_feature_names())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对逻辑回归的正则化系数进行调参。`make_pipeline()` 确保的序列顺序，在训练数据上应用 `CountVectorizer()` 方法，然后训练逻辑回归模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.864\n"
     ]
    }
   ],
   "source": [
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "# 该单元格执行时间较长，请耐心等待\n",
    "text_pipe_logit = make_pipeline(\n",
    "    CountVectorizer(), LogisticRegression(solver=\"lbfgs\", n_jobs=1, random_state=7)\n",
    ")\n",
    "\n",
    "text_pipe_logit.fit(text_train, y_train)\n",
    "print(text_pipe_logit.score(text_test, y_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise-deprecating',\n",
       "       estimator=Pipeline(memory=None,\n",
       "     steps=[('countvectorizer', CountVectorizer(analyzer='word', binary=False, decode_error='strict',\n",
       "        dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',\n",
       "        lowercase=True, max_df=1.0, max_features=None, min_df=1,\n",
       "        ngram_range=(1, 1), preprocessor=None, stop_words=None,\n",
       "  ...  penalty='l2', random_state=7, solver='lbfgs', tol=0.0001,\n",
       "          verbose=0, warm_start=False))]),\n",
       "       fit_params=None, iid='warn', n_jobs=-1,\n",
       "       param_grid={'logisticregression__C': array([0.1])},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "       scoring=None, verbose=0)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "# 该单元格执行时间较长，请耐心等待\n",
    "param_grid_logit = {\"logisticregression__C\": np.logspace(-5, 0, 6)[4:5]}\n",
    "grid_logit = GridSearchCV(\n",
    "    text_pipe_logit, param_grid_logit, return_train_score=True, cv=3, n_jobs=-1\n",
    ")\n",
    "\n",
    "grid_logit.fit(text_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看一下最佳 $C$，以及相应的交叉验证评分。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'logisticregression__C': 0.1}, 0.8848)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_logit.best_params_, grid_logit.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD8CAYAAACb4nSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAFNtJREFUeJzt3X+QXXWZ5/H3B0gMgYghiexAI4m7jEWvUgGajIw6RCk1UTcIuiy41OjM7sZdly3dWSihUGeMWlgzaDGUqIW1mR3GWhkGx5EpGQlCUrorrDQ/TchPKNZ04komThwjIAaf/eOexEuTMbeT292hz/tVdavO/Z7vuf086c6nzz3n3NOpKiRJ7XDEZBcgSZo4hr4ktYihL0ktYuhLUosY+pLUIoa+JLWIoS9JLWLoS1KLGPqS1CJHTXYBo82dO7fmz58/2WVI0ovK/fff//dVNe9A8w670J8/fz7Dw8OTXYYkvagk+b+9zPPwjiS1SE+hn2RJko1JtiS5cj/rT0lyV5JHkqxJMtC17o+TrEuyPsn1SdLPBiRJvTtg6Cc5ErgBWAoMApckGRw17Vrgpqo6HVgBXNNs+9vA64DTgVcDZwPn9q16SdKY9HJMfxGwpaoeB0hyM3A+8GjXnEHgD5rl1cDfNMsFzACmAwGmAT869LIl6fl+8YtfMDIywjPPPDPZpYyrGTNmMDAwwLRp0w5q+15C/yRga9fzEeC3Rs15GLgQ+FPgAmBWkjlVdU+S1cAP6YT+56pq/UFVKkm/xsjICLNmzWL+/PlM1aPIVcXOnTsZGRlhwYIFB/Ua/TqRezlwbpIH6Ry+2QY8l+RfAKcBA3R+ebwpyRtGb5xkeZLhJMM7duzoU0mS2uSZZ55hzpw5UzbwAZIwZ86cQ3o300vobwNO7no+0IztU1Xbq+rCqjoDuLoZ20Vnr//eqtpdVbuBvwPOGf0FqurGqhqqqqF58w54makk7ddUDvy9DrXHXkL/PuDUJAuSTAcuBm4bVcTcJHtf6ypgZbP8AzrvAI5KMo3OuwAP70jSJDlg6FfVHuAy4A46gX1LVa1LsiLJsmbaYmBjkk3ACcCnmvFbgceA79M57v9wVf1tf1uQpMm3a9cuPv/5z495u7e97W3s2rVrHCravxxufxh9aGio/ESupLFav349p5122qR9/SeeeIJ3vOMdrF279nnje/bs4aij+nvzg/31muT+qho60LaH3W0YJOnF6Morr+Sxxx5j4cKFTJs2jRkzZjB79mw2bNjApk2beOc738nWrVt55pln+OAHP8jy5cuBX916Zvfu3SxdupTXv/71fPe73+Wkk07i61//OkcffXRf6zT0JU05H/rmh3jo/z3U19dc+M8Wct2S6/7J9Z/+9KdZu3YtDz30EGvWrOHtb387a9eu3Xdp5cqVKzn++ON5+umnOfvss3nXu97FnDlznvcamzdv5itf+Qpf+tKXuOiii/jqV7/KpZde2tc+DH1JGgeLFi163rX0119/PV/72tcA2Lp1K5s3b35B6C9YsICFCxcCcNZZZ/HEE0/0vS5DX9KU8+v2yCfKMcccs295zZo1fOtb3+Kee+5h5syZLF68eL/X2r/kJS/Zt3zkkUfy9NNP970u77IpSX0wa9YsfvrTn+533U9+8hNmz57NzJkz2bBhA/fee+8EV/cr7ulLUh/MmTOH173udbz61a/m6KOP5oQTTti3bsmSJXzxi1/ktNNO41WvehWvfe1rJ61OL9mUNCVM9iWbE+lQLtn08I4ktYihL0ktYuhLUosY+pLUIoa+JLWIoS9JLWLoS1IfHOytlQGuu+46nnrqqT5XtH+GviT1wYsl9P1EriT1Qfetld/85jfz8pe/nFtuuYWf//znXHDBBXz84x/nZz/7GRdddBEjIyM899xzfPSjH+VHP/oR27dv541vfCNz585l9erV41qnoS9p6vnQh+Ch/t5amYUL4brebq28atUqbr31Vr73ve9RVSxbtoxvf/vb7NixgxNPPJFvfOMbQOeePMcddxyf/exnWb16NXPnzu1vzfvh4R1J6rNVq1axatUqzjjjDM4880w2bNjA5s2bec1rXsOdd97Jhz/8Yb7zne9w3HHHTXht7ulLmnp+zR75RKgqrrrqKt7//ve/YN0DDzzA7bffzkc+8hHOO+88Pvaxj01obe7pS1IfdN9a+a1vfSsrV65k9+7dAGzbto0nn3yS7du3M3PmTC699FKuuOIKHnjggRdsO97c05ekPui+tfLSpUt5z3vewznnnAPAsccey5e//GW2bNnCFVdcwRFHHMG0adP4whe+AMDy5ctZsmQJJ5544rifyPXWypKmBG+t7K2VJUmjGPqS1CKGvqQp43A7XD0eDrVHQ1/S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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_grid_scores(grid_logit, \"logisticregression__C\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调优后的逻辑回归模型在验证集上的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.87812"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_logit.score(text_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在换一种方法，使用随机森林来分类。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "forest = RandomForestClassifier(n_estimators=200, n_jobs=-1, random_state=17)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, n_estimators=200, n_jobs=-1,\n",
       "            oob_score=False, random_state=17, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forest.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.855"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(forest.score(X_test, y_test), 3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述结果可见，相较于随机森林，逻辑回归在 IMDB 数据集上表现更优。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### XOR 问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "线性分类定义的是一个非常简单的分界平面：一个超平面，这导致线性模型在 XOR 问题上表现不佳。XOR 即异或，其真值表如下："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src='https://doc.shiyanlou.com/courses/uid214893-20190505-1557025558167'>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "XOR 是一个简单的二元分类问题，其中两个分类呈对角交叉分布。下面创建数据集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "rng = np.random.RandomState(0)\n",
    "X = rng.randn(200, 2)\n",
    "y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7fd9033288d0>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显然，无法划出一条直线无误差地将两个分类分开。因此，逻辑回归在这一任务上的表现很差。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_boundary(clf, X, y, plot_title):\n",
    "    xx, yy = np.meshgrid(np.linspace(-3, 3, 50), np.linspace(-3, 3, 50))\n",
    "    clf.fit(X, y)\n",
    "    # plot the decision function for each datapoint on the grid\n",
    "    Z = clf.predict_proba(np.vstack((xx.ravel(), yy.ravel())).T)[:, 1]\n",
    "    Z = Z.reshape(xx.shape)\n",
    "\n",
    "    image = plt.imshow(\n",
    "        Z,\n",
    "        interpolation=\"nearest\",\n",
    "        extent=(xx.min(), xx.max(), yy.min(), yy.max()),\n",
    "        aspect=\"auto\",\n",
    "        origin=\"lower\",\n",
    "        cmap=plt.cm.PuOr_r,\n",
    "    )\n",
    "    contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linetypes=\"--\")\n",
    "    plt.scatter(X[:, 0], X[:, 1], s=30, c=y, cmap=plt.cm.Paired)\n",
    "    plt.xticks(())\n",
    "    plt.yticks(())\n",
    "    plt.xlabel(r\"$x_1$\")\n",
    "    plt.ylabel(r\"$x_2$\")\n",
    "    plt.axis([-3, 3, -3, 3])\n",
    "    plt.colorbar(image)\n",
    "    plt.title(plot_title, fontsize=12)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVwAAAEHCAYAAADiX/4YAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXecJGd54P99qjrP9OSwO5tzVo5IQouQCEZEYwzGGDDG9p3D2XfmbDgHHO53Pt/ZGNucbQw+4DiDjYxBHGBhorK00molbdbmnbCTU09Pp6rn90f1zHZPV810b0/anfp+Pv35dFe99b5vVXc/9dTzPkFUFR8fHx+fhcdY6gn4+Pj4rBR8gevj4+OzSPgC18fHx2eR8AWuj4+PzyLhC1wfHx+fRcIXuD4+Pj6LhC9wrwARea+IfOcKjz0iIvvneUrLHhH5toi8f6nncTUgIvtFpHOW/Z8TkT9azDn5zA/XvMAVkXMicv989qmq/1dVX1fG2CV/DFXdo6o/rGQ8EdkoIioiifzrnIj8VoXTXlJU9Y2q+vmFHENEavPX5r0F2+IickFE3lmw7VUi8n0RGReRURH5hojsLti/X0Ts/LUeF5ETIvLBhZy7z8rgmhe41xgNqloLvBP4HRF5YL4HEJHAfPe5WKhqAvgF4M9FpDW/+U+A51T1IQARuRP4DvB1oAPYBLwIPCEimwu6685f6zrg14G/E5Ed8zHPq/ka+1THiha4IvJhETklIkMi8rCIdBTse11esxkVkf8lIj8SkZ/L7/uAiDyefy8i8gkR6RORMRF5WUT2isjPA+8F/nNeU/pGvv20xi0ipoh8TERO5zWp50Vk3VzzVtXngCPADQXz7RCRfxaRfhE5KyK/WrAvKiKfF5FhETkmIv+58JE1P6ffFJGXgAkRCczR320i8lz+fHtF5M/y2yMi8kURGRSRERE5ICLt+X0/LLh+hoj8toicz1+3L4hIfX7flDb//rxmOiAi/6Xc71RVHwG+CfxF3nTzLuDfFzT5E+ALqvpJVR1X1SFV/W3gaeDjLv2pqn4LGAKucxuzYM4/LyLdItIjIr9RsP/jIvJQ/tqMAR8QkbCI/Hm+fXf+fXhGvx/Ln3+R1u4y/oMicih/zZ8UkesK9p0TkY+IyEsiMiEinxWRdnFMPOMi8l0RaZzzwvrMD6p6Tb+Ac8D9LtvvAwaAm4Aw8JfAo/l9LcAY8A4gAPwHIAv8XH7/B4DH8+9fDzwPNAAC7AJW5/d9Dvgjr/kAHwFeBnbkj70eaHaZ60ZAgUD+8x1AEnh7/rORn8PvAiFgM3AGeH1+/x8DPwIagbXAS0DnjDkdAtYB0TL6ewp4X/59LXBH/v0vAN8AYoAJ3AzU5ff9sOD6/SxwKt9vLfBV4P/MONe/y8/leiAN7KrgO28EevLf7wcLtscAC3iNyzEfBHry7/dPXZ/8tXgLYAM3eow3NecvATXAPqC/4Hv+OM7v5235/qLAH+AI+TagFXgS+MOC8XPAn+H8Nu8FJoAdM39XwI1AH3B7/pq/P/99hgu+26eBdmBNvu3B/HER4PvA7y31/3SlvJZ8Agt+gt4C97PAnxR8rs3/KTYCPwM8VbBPgIu4C9z7gJM4QtCYMcb0H8NtPsAJ4K1lnMPUH3oEmMy//5+A5PffDlyYccxHgf+dfz8tLPOff45SgfuzBZ/n6u9R4PeBlhltfjYvOK5zOYcfFly/7wH/vmDfjvy1DxSc69qC/c8C767we/8uzk2pvmDb2nzfO13avwHI5t/vxxGwIzjC3gJ+rYzvZ2fBtj8BPpt//3HyN/OC/aeBHyv4/HrgXMH4OaCmYP8/Ab8z83cF/DV5QV3Q9gRwb8F3+96Cff8M/HXB518BvrbY/8uV+lrJJoUO4PzUB3Xsf4M4WkAHjoCd2qeA66qxqn4f+CvgU0CfiHxaROrKnMM6nD9eubTg3Bj+E86fMpjfvgHoyD9SjojICPAxHK2Gmecz473btrn6+xCwHTieNxs8mN/+f4BHgC/nH5P/RESClFJ07fPvAwX9A1wqeJ/Mn3dZiMhP4wjB7wL/vWDXMI4gXe1y2GocjXiKblVtwLHh/gXOjXUuCq/heZzzdNsH7tegsP2wqk7Msn+KDcB/mvFdrZvRtrfg/aTL57KvrU91rGSB243zYwVARGqAZqAL53F0bcE+Kfw8E1X9C1W9GdiNI4g+MrVrjjlcBLZUMmlVtVT1z4AUl22TF4GzqtpQ8Iqr6o/l9xedD84fsqTrGfPy7E9VX1HV9+A8Dv934CERqVHVrKr+vqruBl4FPIjztDCTomsPrMfR6Hpd2laEiLQBnwA+jGPieJeI3JOf9wSOOeQnXA59F47mXYSqpoHfBPaJyNvmGL7wuq7HOc/prma0dbsGhe0b879Jr/1TXAT+64zvKqaqX5pjrj5LwEoRuMH8gs7UK4Bjb/ugiNyQX6z4/4BnVPUczqLLPhF5W77tLwGr3DoWkVtF5Pa8JjeBIwjt/O5eHDulF58B/lBEtonDdSLSXOY5/THOglwE55F7PL/wFRVnMW6viNyab/tPwEdFpFFE1gC/PEffs/YnIj8tIq2qOvXYDWCLyGtEZJ+ImDg28GzBtSjkS8Cvi8gmEanFufb/qKq5uU5aHJet2W5kf4XziPwDVe0B/jOOh8HUgtRvAe8XkV8Vx2WsURzXvTtxzCQlqGoG+FMcm/Zs/I6IxERkD45N+B9nafsl4LdFpFVEWvJ9f3FGm98XkVD+hvEg8BWXfv4O+MX8b1BEpEZE3iQi8Tnm6rMErBSB+y2cR6ep18dV9bvA7+DYtHpwNM13A6jqAI4W9Cc4ZobdwHM49ryZ1OH86IdxHvsGgf+R3/dZYHf+Ue9rLsf+GY4w/A6OgPoszoJKOXwzP+aHVdXC+UPeAJzFeTT+DFCfb/sHOCaRsziP2Q95nAvgaNFz9PcG4IiIJIBP4thXJ3FuSg/lz+UYzkLd/3EZ4u/z2x/N95/CsSWWwzocO3EJeQ30bi4/YaCqn8HRDH83//lxHHvpO3C+9/M4C0h3q+ors4z798B6EXnzLG1+hLMY+D3gf6rqbMExf4Tzm3oJZ+H0YH7bFJdwvt9u4P8Cv6iqx2d2oo7HyodxbjTD+fE/MMu4PkvI1KKLzyyIiIEjsN6rqj9Y6vlUi4j8Oxwhee9Sz6VSROQzwFfUcf9aFojIRpwbR7AcLd1n5bJSNNyKEZHXi0hD/lH0YzieCk8v8bSuCBFZLSJ3ieP/ugNn0e1flnpeV4Kq/txyErY+PpXgR7x4cyfwDzh+qEeBt+Ufm69GQsDf4kRVjQBfBv7Xks7Ix2cF4psUfHx8fBYJ36Tg4+Pjs0j4AtfHx8dnkVhQG24sKNoQlqJtIh6NXXBrWu3xlfRRyfGubT06qPq8FmT88htXP//SxlWfv+f8XcbyvDBu83IbzENPKfd4j/Hdx3Lrs4LxXb9Ar/N36ddrrHL7reD4549dHFDVVpfGZbO10dRkdm4zac+EPqKqb6hmrCthQQVuQ1j4+RuKEiBhePisB1y+F8Pl+3NrBxAwyzveq4+AUTovz+NdxnLv0/141/Mqs0/PtqbLn83jBNzaBgLubU23ti7b3NoBGC5zcO2zyvEDHhfLCITK2ua13XQ7Puh1fNhlm8vxhssX6NGv+/xLxwGPubpsE4/zx3TpNxjzaOvSh9vxbu082po3/ep5l5YVMZlTfvFG9+tTyO89nmqpdqwrwfdS8PHxuabwUpSWAwsqcEVKNUdPra1cDdddOSj7eKdtqTZbvYbsss1jruVq7tVqfW7aZSXHA5guc6hEw3U7B7e2XnN1HStQ+rOtRGv1amu6apjlaa3OvMrThr3n6qL1VTB/V821Sq3Ts62bll2u1jtbv1UieP/vlgO+huvj43PtICtYw/Xx8fFZTARf4Pr4+PgsGl4L88sBX+D6+PhcU6xYDVeA0AwDtqerVLkLUZ6Lbi5uXRUs0FW06FalW5jbQpLbWKZHB+UuWlWyEOZ5ri5zWJBFN5eFMCh/0ctzIcrFBataty63hSyvft2Pd19IKvu8vBaiFmLRLOiRLbTcfpdg0WzFClwfHx+fxUTE91Lw8fHxWTR8DdfHx8dnERDAw7q1LFjwwIfQjBEqCnctM0DB+3j3tuUGKVQU+FBmuC2422Zd579A4bbl2mXB3Q5eiQ3XbazlGG5bSb/ex5cZ2ltJaG0lNtwFCLe92gIffD9cHx8fn0VkOQtcPz2jj4/PNYPgPIHO9SqrL5E3iMgJETklIr/lsv8TInIo/zopIiNu/RTia7g+Pj7XDPPlFiYiJvAp4AGcArIHRORhVT061UZVf72g/a/gVH+elQUVuIa4+eG6R4FUm7Kw2lSOFSWfKTflYLUJXTzyli5WQhmvfsu1ywKImx/sMkwo4z2v8hLKeB1fdkIZqN4GW61d1S0VY7X2XsPjeCPovr1axNv/vkJuA06p6hkAEfky8Fac+oZuvAf4vbk69TVcHx+fawZHw52X0N41wMWCz53A7a5jimzAKdD6/bk69QWuj4/PNUWZJoUWEXmu4POnVfXTVzjku4GHVNWaq6EvcH18fK4dyncLG1DVW2bZ3wWsK/i8Nr/NjXcDv1TOoL7A9fHxuWaY8lKYBw4A20RkE46gfTfwUyXjiewEGoGnyul0EZLXFNtTqk0oU23yG89+K1hIcls0q2jRyjV5SwUJYcqsmFBtQhmnbXnVFSoKXChzIczz+AVYCPPst9qaYNUGA5S7ELZQ43u0FZd5qZQuhKnX4tgCLZrNl5eCquZE5JeBRwAT+HtVPSIifwA8p6oP55u+G/iyqpZlOPY1XB8fn2uH+fNSQFW/BXxrxrbfnfH545X06Qtcn3lDFfoHhMFBA9OE9jabxualntWVY2GSMFuI2uMENb3U0/EpEy93yuWAL3B95o3TZ0zGRgVbnR98IiGszSqrVi3fP4AX52I3cajhLYBgi8GW5HPcMP6vCMu3moCPY1KQZRw/u+jJa6pOCFNJ1V/PwAc3G2pp48psqOWN43V8JQllqrUBu9l7q616m84EGRuzsAvkkW0LXZ3QsS5SNOZyTChTuH0osJoXGt+GJZfbnYndTFzH2JZ+wT2hDCyeDbXawIeAS4AD5dtlAWw3G6zLtsW24TomheV7g1/G9wKfq4lkUh31YgaqkM1eXVrhmciNWDN0EUtCvBK5eYlm5FMuTpl0mfO1VPgmBZ95IRYT3J62RSAYXL4ahxu2BHC7e9iyjEsJ+DiIIL6G63OtE4sJDQ1SZFoxDFi/MbisH/Hc2JB6GZNs0TZDs2xMv7xEM/KpBEPmfi0VvobrM29s227Q36f099uYprBqtdDUukC2ugWkPXuW7cmnORF7FabmsMWkNXuBXZPPLPXUfOZAWN423IVfNJvxFFZ1JVyPpzo3u4zXo0Vh25wVJpOrI5MJEDQniYbHkHzyi4oWrcoMRvBqu5gZvCrK1lX2opWz4NKx0XnN1m+1gQtXshBW3MHcVW+vyz3HtvFjDAfXUGuPUafDEM4vNi1m4MFCBD54ZPByW+CqZNHL/fhI2cfPC/Poh7sQrGgNN2dFmcy0kHcmIW0HyOZi1NX0sIxd+XwWiahOELXOL/U0fCpA8FZUlgMrWuCmso0Um7ENbIVsLkooOLlU0/Lx8blSlrlb2IoWuKpupy9YdhDwBa6Pz9XGfOVSWCgWvuJDNVV7q7ZrureVvL3ATGex7GJ7lqCEgzmCAcM1mGBqLFVIpqJMpiKYhkV9PEkwWJwOs9qqu+lMgMl0kHAoRyySmzZzLFZCGadtefZSzyoIZQYpLHlCmUraesx10armetqgo6XbFsAuC6DiZhteBoEP+BrusiUWGWE8edmGCzammSMUTM16nCr0DzeTyQRRDECZSMVobx4mEs5UPS9VuNhTRyIZBhQBIpEcm9aOlrUgYFmQyQqRKJgVuo6mU8r5czlGR21CQWH9ZoPmlqvP08BnhbLM/XBXtMANBtLU1fSRSteiBAgHJ4mGJ+ZcMEtnwmSyU8IWQFAVBkfqWNM+UPW8RsfDJJIhVJ0bgQKTqSADw1Hamr1NHarQcylIb38QEedzR4fN6lV2WePmcspLhzLkcvnPWeXk0Um274Lmq9C9a7kyoRFesTYwRg2rZIDNRhcBmbNYgE8ZrGiTwtVAwMxSGxuuKNwvkw3mhWEx2dz8XM7R8QiqxaqsqjAyFplV4I6MmvQNOHObys7Z02MQiyr19XOH1/b3WdgzZLNtw/mzaV/gzhMjGud7ubuxMFAM+rSJ0/Y6Xhd4Cj+ObX5YytDduViEBOQzBvSwa7rdlapNKFNJAm53G7L787tlW8iElgjdgGkTCl4+ZjYbcOmcLn8VwSA4cbLF7YJBIRiJedprB4bURWAKA0MhWlZdFpjulXTDZLJJbLtU05pM2hw8MMGWHXGaWsLL04+2Ehuum60Tqq96W0bbF9PXkcNk6ru1CDBBjPPGJjaHRksOryShjKu9tFobrtdYpot/bSVjefRbLSLe/vfLgWXsIrx8qYmmMU2bwuQBIkpL4/i89N/SlC4xaxiitLVm3Q/IM1PYXt5eXvKY+oYALrIYgMkJi6OHRhgfnX0OPrMzrHFm3kgtTAbsuqWZ0DWIYcz9WrK5Ld3QVy8isKZtkLraJAEzRziUoaN1hLra+UlSXROzWL9mgkDARkQxDWVNR4aG+tntfK2tpT8mw4C29vIeVptagsTrvIWubcPFcxNl9eVG0mzk5aa38XjrhzgZv5eseGiK1zC1UmoSMrGolyu/rj7FGCJzvpaKFW/DvVJMM6/R5rXa+bYbNdZnaWqaxLIcT4NyfiOtbTCegKFBR9DaNrS0GTS3lHdfFRH2Xl/L4ECWUycmyLkos5lUeQtwMxkPtvGjNb+BJQFUAgyEN3Om9g7uv/QJAlq9Z8fVwnXB0zyauR4LAxAEmyAWm4J9+H/H6hE/tNfnShEBF5fbWdoLW7bA2rXK5CTU1oUIhyu7EYghtLSFSCYtLp5LoQXy1TCgua1yrdS2bI60/Bg5CU2n47eMECnqOFdzC1sTT1bc59VKmzHK/sgRjmTWkdAI7eYIe4KdhMTC/zvOD8vZhrvwyWtm5EJ1WwgDdw3R7U5VbUIZKL+6gpfW6lbCo9yEMlB+kMKVJpQJhKGmrrpKuBu2xhjs7yOVzGFZimkK0ZogG7a3EoiULpi4LYQlJ9K8/ORFhgcSqPFfCO16LZn7fwWCTlvLCDEU20Yg91JZCWUuD7YAwQSVtK0y8KHFtLg3cq6wQ+flklTGLnNxCipYNPNasFqI5DVuARIex88HIkubYHwu/FvqMkDVefwXKc90UC22reSySjAk01F3MwkEDG65q53hoRyJsTS1dWGa22NlR/HYtvLM906RTmVBQawcgWM/QKws6Qc/CoBhZ2nIXZq38/LxAXcvnOWCL3CXmLFxkwtdUbJZwTShY3WOttaFcYJXVS6eS9F5YQRVJRAw2LY7Tkubewo9wxBaV9fQurqm4rGG+sbJZa2iKhBiZTBPPgaZX0OCIYJk2DJ58EpPx8enFBFf4Pq4M5kyOHM+Nu3Pa1nQ1R0gGFAaG69scWo2envSdJ5PTbuPZTM2x18a5cY7AtQ1eDz6XSHZjPtNQ1SpTXXTnhtmd/JRwuonCfKZX1aswHXqWRXbMatN6FJOUvHZ+vSaQyU23HKTfc9ZHbb3ckTYFLYtXOoP0dIu855Qprtz3DWSrLcnQ2N7c9ljlZNQpnVtAH32Qkm7mtog+3P/jFgCJmDOU1LvSuyqHlVrFyTwwS3Zd7U22IVKKONyXlWP5VEHzirTN7xSBMFYqQLXZ3ayWXArVmjlFmY8K+f+I89l51+bDkeC7Ll1E0cOnHPO0BBE4Kb9uzztxj4+VSOCEVy+/t2+wF1CmpqU0VFHq51CBBob53ccK2dz7tS462O+YQptHZXbaMth/bZ22ta30dc5RCBo0r6umUBw+WofPtcAvg3Xx4vGRhgagtHRy3kTwmFYs2Z+x3nxuUHGx7JFPrVT1NQGaW7zyC0wD0RrwmzYsXrB+vfxKURYwQJXREptuBUklKnELuvmrlT1WB5RB1X70RbYZnfugcS4zUTSJBI1aGg0px+5qy/sGGJsJEViPOcqbAEmxrOoESMYcbdrlp3su4qELp7tYFESylTa1i2hDLj7t7raQAv6TFkGk7ZJPJDFNMv0Yy3oUxW6Jk16JgNEAsKmuEVNwL3trHMC14Qylfjh2i4Z9CzL3Yxl5ebfjAWArOBFM5/yqI0b1DXOr5fAFKmJbF6Au//wDUNIjKaI1ngsJC0CE1LLK4HrGZc62u1uNlsnCXBt54e1FZ4dbaQzFcPIV4m+sW6cjTWzJ78vRBWeHIjQlzaxVBCUU+Mm97RnaQ4vzKLU8mcFa7g+S09dUwSdZUXYtpVozcII+3IYkUa+F307FiYqJr1GB2fMHTyQ+QbmNSx0jyXidKWi2Mi0ZnhwrI7GUI76YHmrpgNpY1rYglMbxFJ4YTDA/R0rN6vbcvZSWMZpHnzmg0g0yPqtjRhuodOm0NoRX1KB+2LoTnIEp92HLAmSkDgXjE1LNqfF4MxkTT6BzWUshXNJ9yAUNwYzJm730tHsyvUCETEwgqE5X0uFr+GuALbuaaG5PUbPxTGSiQyppIVhCGs2NbFhe8uSzm3IbC2JZ7YkSL/Rxib71BLNauFRF3dAZ3v51AQUU2Cmt19k+Sp4C89KtuG6Jq9ZoIQy5S6EOW1LT9u9CkIlVQwqqYKwOJVwCxPKtHbEaO1o8Wzrda5lV1e4woWouCYYlGIvCVNzNBgTEIyBGUZxBNH0L8Stz6CHDbqCRbNyqyvY1Va9NYJsiKV5JeGYFKanJbC+xkaNSFFbrz5X10Jo1PGvnhLgpsCeRpk+x8K+VJXhtDKaNagPGzTOlMxlLoSB+2KYbZUuhHkFOJSbFL9yfBuuj48n11kHeVReiyXOT1HUJkiWjXoOG+Ewu3iFreQwaWKY2zhIPZUneleFpIYJSY7lUJ1tT12S0axJfzqEiGKrsLcuRWOo/NV7U+C+1TkODxtcmjQIm8LOBlhbW9rWVuXJ7gyDqcuCriVmckdHdEkTcs83IoIYy1esLd+Z+awI2rSX/bl/43DgBiaopU172auHCZHlZdnLSbZi5X+mQzTyPV7Nm/X7BCuocnvJqueZ1HaymCjChuAgt0QuTHsHLAWmwD0t4yRyBknLpCGYI2hW/ncMm3Bziw3Ys6Y8PDNqMZhSChXTgaTF+dEsm+Y5j8ZS42u4Pj6z0KL97Ld/VLL9pGyfFrYOgiJ06io2SVdZfSftEI+ndmEV1MS9kG0iIlmui3RXO/WqqQ3Y1AYcrXYhxf/FcYuZVgBLoXM8d20J3JUcaWYYQjhcfPJeTy+LlVDGa3v1NtTyK9FWErjgfnx5Y1Vtl823tW2b0b4RDNOgrqXe3fF/ngMfVCFnu9gUMUgH4hCMlzX+hWxHyQKVhcnpbBvX1Q4Xj1mBDdYN9+MXIIH4FSSUCZo5oNTdLGgaaD7Bjpu91c0uC+422JyrXdcj8GEBk9d4/W8r7kvkDcAncdIsfUZV/9ilzbuAj+PcL19U1Z+arU9fw73K6Ose5+zxc2TSOVpWxdm2bzXhyMJZJYcvDfHst59GLRtVJRwLc/tb91NT72IonEdEoJUh+mmk0HtRgFXmsOdxM8mpuHoEeC0GXSlD2SBd6RqChrI+miJqLlAk1RWyrSnM4GSuSMs1BbY0LVxY95IwTxquiJjAp4AHgE7ggIg8rKpHC9psAz4K3KWqwyLSNle/vh/uVUTPhVFefraLseFJUsksXWeHeOrfTmJ5aCHVYlkWz3zzKbKpDLlsDitnkRxP8ty3nliQ8WZyq/ESYXIEyGFgYWKx3TxPg5Esu4+1oVGMGQ/rBjZrQvNT0h7gpbE6fjDYyrFEDYfHavl2XzMD6eWwNHeZtpog+9qiBA3BEAiZwvXtNbTEltc85wMxzTlfZXAbcEpVz6hqBvgy8NYZbT4MfEpVhwFUtW+uTn0N9yri1OG+okc0VSfRd2/nKGu3lO8wXy5DPcOUJOxVmBgZZ3I8STTu7oqlqkyOJTCDAcLxK3+8i0uSB0OP0223ktIQq4xB6owkUH6fDWaKvZEeXk6tnha8NWaWG2OXS/uowpAVJU2YlsAkIaP8G1giZ3IyGZ9277IBVDgwUscb2gbL7mcx2NQQZmN9iIwaBA3v8kpXNeVruC0i8lzB50+r6qcLPq8BLhZ87gRun9HHdmdIeQLH7PBxVf3X2QZdhATkZfrhuhaRnP+EMl7b3ZJ9V1OEEWbzwy1vrJl9plOlNjgrZ5OatLElRO+FAbJZi7Y1jcTi0XlI0hJxS9cLCISixb6v+T5HLvXz/MP/Rjo5Cao0r1vLTW97A8FwuKTtXOMDBMwQ6xkr2BJ197l1S/QNYATZWTvBhthZBrNRIkaOppCFiOPfm7INfji8mqQVAHGE7811w2yMOZUo5iqM2Jdy3LqYYaKYsEwyRg1Bl4Q0Fdlw3RLKuBWWxD3Zt5utVGwlZ095N1/GzS7r9fDk2tbNhuthq10oG24FfrgDqnpLlYMFgG3AfmAt8KiI7FPVkdkO8LlKiDdEGRsuLkljBgzCkSDf+6ensW1FVTkK7LhpI1uu31rVeE2rW/I/3suCXkSItzQQrS3NoWtlczz9lW+SS2emtw1c7OTQN7/Lre94U1VzqZaoYbE2nACKgxkOjLUybgUdO29eBjw/1khbOEPMnN31zFYwxXZ1LzAEPIqb+CwgIuKpKFVIF7Cu4PPa/LZCOoFnVDULnBWRkzgC+IBXp74N9ypizy0bMExj2tPDDBg0tsY5d6KHbMaxsdqWjW3ZnDh4jslE+Zmn3DBMgzvetp9wTRQzGMAMmNQ21XHLm+9zbd939iI6o4aPWja9p86Syyy/ZCqqcCkTdV1U60p5m2hU4ehYmK/3NHBguDZvTrgsdU1RttRmKbPAsc+8IiDm3K+5OQBsE5FNIhIC3g08PKPN13C0W0SkBcfEcGa2Tn0N9yohk85x/FAnatuogmkabN23lvXb2vnuV0pvqCLQ3zXA+h1rqxq3vrWJ+z/4VsYHRzFMg9rGOs/6YVYuh5WYRCCjAAAgAElEQVR1yXSljua9HHFNXCmO0PTi7ESIE4nodJYu5xDFQAkaypZ4lp3x5XeDWREIMA9eCqqaE5FfBh7Bsc/+vaoeEZE/AJ5T1Yfz+14nIkcBC/iIqs5quPcF7lXCoSfPMjKQmF7DsiybM0e62LCjHREpEWgiQig8b/6I1LU0zNku4mJmmCIzOUlwnuYzX4jA+kiCC6ka7BkPe2si3tWETyYiRcJ2iq3xLPsaMi5H+CweUq4GOyeq+i3gWzO2/W7BewX+Y/5VFotftbeChDILsRDmtK0ueYxropt5CFywLBs7ZxMMB4qOz2ZyDPWNlzoMKAwP5Vi3fQ0XT3VjT2XRF+d6tm7ZCG4uMNVWvfUIXFAzghEIYOdKtdyXHvkRd77vvXP2qQp9VpyMBmg1x4mGSudfdmUFmDNw4MaGBJnhAJfSEef3KsodTWOEgvmkOS5j5bTUEqdAhiA643dc7kKYZ9uqE8q4LYSVn1Am51F41H2BrfzAh4VMXoOfS8FnNmzL5vBzZ+g+O4gCsdowN961hYY2RzDNmkDcstlz507EDHDh+AVsy6axvZEb9t+A6SJsrZxFOpEgUhvFKM8fsWwaO1bjFaA6dLGTybFxonVx1/0ASTvI9yd2kNYgoNgY3BTrZmuk/ECHSgkI3NU0QtoWsoSoMW3PaMgpOmIWZxNmke3XFFhTszzNJldCxrLJWEpI5OpKbjNPJoWFwhe4y4Djh7roPjc0fdefGEvx9HePc/9P3EYgaBKKBKlriDE6NFF0nKrSuqYZwzTYe/de9ty1B7UVw3RfC33l+eOcev6480GEXXfdwMZ92+btPALhEJtvv5VTTzxdss80TdKJ2QXugcmNJDVcJMgOJjtYFUxQa1ZmE1WF/myEpIZpCaapDczucRA2lHCZ/rd7Gy0G0wYTOaZTR26osWiLXP1r0LYqRwYn6UtmEXHk1476CG2x5WUO8ka86+MtA3yBu8SoKp1nhkoesVSVV16+SDadwzQNtt+4gcNPnyaTyTkLPQo3v/Z6AqHLX6GIIB4mm57TXZx6/jhW7rLgOfb4C9Q21tGytn3ezmfrnbdy+ukDqFUs4FSVeGur53Gq0GvVlXgMCNCdrWO7WX4QQcY2+P5IB0krCOK4b22NJbi+dmRO7bUcgga8dnWWgbQwkROawkpdUEEWT+AOJLOcHJxkMmfRXhNie3MUcx5O7vRIir5kNh/A4Ww7NpIiHgoQdclXsvwQkOUr1ha8am9ohg13qRPKVNJvJYEL5SaUmbndttXVnmVbypkjXY45QeD8K5e4/tX7iNZGsWyDptXNmIGCR6c5bK1nXz5dJGzBMS+cO3yGlk2bKguSmHGuk2NjHP/hDxk4e45oXZwNt9zMhecPYltWPj+pyb43vwUzVu/dpxFFUFcXLdMMYJsFwQ5z2GVfHKlj3AoV+daenozTEbNpDedc7bLl9FvYToDWALTO0XauqruF2LiYgFxsoJfG0xzsTUyX15nIpOgZz/CqjjjmDF80r9+WG5atdCUyzNTzFeiZSLOhNlzUtpx+Fz0BuYhvUvDxxjCEpvY6hvrGisyfqnr5s4Kdszn8xFEeeN99GMHKE47MFLbT293cuCogm07z2Gc/TyYfWZYeH2est49dr7ufdGICwwjQcd111LZ4a7fg/E82hUc5m64v8hgQgTWhiVmOLKUrVepbayl0TYZoDVd3vtUyMGlxdDDFRMamKRZgT0uEWpeFwdk4PpgsqmWmQNqy6U1m6ait7nHaTQwqpRHey5p58lJYCK6GZ4Rrnhvu3k44GsL0sL1OYVs2qSsMZli7a0uxRgyYwQBrd1cXjdb50mFymUzRP9LO5Th/4Hl2vmY/2+977ZzCdooba/pYFxrHwMbApsbIcG99d0W5DQACUtpegKDhzHEoY/LEQIx/vVTL88MRJq3FWRQamLR4sivF4KRFylK6x7P88HyCVK6y80u6tLcUJrLVVzlujQZLnjEMoDV6tehmeQ13rtcScbVcxWuaWG2E177rLn7w0FOzRoepKqHolWkwG/ZtZ+DiJfovdGMYBrZls3rbJjp2bL6i/tITE7z4jW/Td+q06/7U6GjFfZqi3BHv4WbtJacGEcmBWy6COdhWM8Hh8XhRVVxDYGMszUA6wKODNfk0hcJEzqB7MsjrV40TWmD14+hAxiUJuHJuJM3OlvKfWuJBk9FMsXA1Beoq1JTd2BIPk8xajOfs6bWCTfEQNYHlqzUWISvYLUzEIBApzptaSVJutzRq1dploXyfWa+xXO29bvOvIAF4KpmbMxS3cVUzgWhd+UUUC8YxgFt//M2MDwyRGElQ19ZCTWNBMEMFfrhqhHj6Hz5Hor/fc67169ZDKO6eVGYOW2mAqR+mWbZdtdBWujVuk9I0pyYiqELYVG5pShMLhXi2rzhoQRFyCmeTNWxvKv07lG2X9TqvgsfbiVxpWklbYTSt5NRwTfbtZuvc0Rjlub7LNlxDoCZo0hQOlNh83WzAXuk8p+ytexuiJHM2adumRgwChpDN2q5t55qr7aG8WxVq9eUjiO+l4DMbqsoz33xmznbDl4YYHxoj3nrlpc3jLU3E21dd8fEAY5cukRwaKsmbAM5N0gwE2PNjb65qjGoQgX31KXbXpcgRJGRcrjQyni1VYy0VRrMLb1ZojgbpGi+ORDMFWmKV/Q0bIgHuXB3n/FiayZxNazTAmniY+SzRFgsYxDA8F9iWLTJ/kWYLgS9wlwHjwwlSE3PbZm3bouuVi+ysQuDOB9nJJGK4PH+LsO6mW9j2mvuJ1tfP65iOX22IrlSUkAkboyligdm1JFNgyiyuCpOW0BC06U0LFAUtKM1hG1y8BOaT3a0x+iayWKr5TGMQC5qsras8u1VN0GR3c/FTjX1VrWwtICvVpOBTHrZll5UMWhAEuHjsDJdOdxKJx9i0bzu1TXUVj6mqDJy7wGhvP/GWJtq273AXoi40rl3nqt2GYjH2veXtZfdTCS+M13M2WYOFYADHxmvYFEsRD+RYG00TmeWXPJg2eGYwQsoSlKmENc47EyVqKutrFr4kTk3I5P7NDZwZTjGesWiJBVgbD5e4cvlUg6/hVs3IsE1/n4UIrFpjUld/VUy7bOqa407AwhzBVGIY9Hf2Mv7iK46blwidR89w21v207xxY9njWbkcT3/5q4z19mNbOQwzQE3j07zqA+8lEJrb/mWGQlz/jh/n0D8/lL9ROALjpne/d0GE7VgukBe2Tt+OaBROJ6MYKC+PxbmjOcHqSKnLV8aGx/qj5ArstgZKPKhETZv2iLIpblGOT7+qcimpnB1LoQob6wOsrjErqpwQDhhsb77G6ogtJ1a0H65hYIaKf1yVJpQ5d3qCrvPpaeP74ECSzTvqWLthxmJcBcljyqmuMNvxrothBQtUtmVjWRbBkEf2rBmLZgZw64P38uzDP2LKE1IVGtpbGO7pnw7V3XD9Ts4dOnbZp1YVK2dx+NGD3Lttt8s47vO/+MJhRnv7sPM+uJadJTE0xJlnX2D7/v2oKoPnzjHe10d81RqaN20uEioSCLPmhtto2bKLS8cOY5gmbbtvJBQrXbhzDRxwWTQ8OxnncKKWlGXQGMxyU/04jaEcKiF6J0OuAREg06VtDgzX8qa1mZIctF0TwRLfUhshkRVeu86YPi/HaWH2BbqjA2lODV/2NBiYtNjSGGFPm3PebkllctnyFsLAvbpCuZUVPNtWmVCmksAFt3nlMh7+3wu4aOYZxLMMWFaqoqrS05Wh62IGK6fUNQYZHswWeWPbNpw5Oc7qtbE5/VYXG9u2OfbMSc4f70RVicVj3HDfDTS2Nc55bNPqVh740NsZuHgJRGhZ244ZiZGaSJKemKS2qYGzB49guWTiGh/0rOjhSs+x49PCdnruuRw9x46x5e67eeYLX2D00iXUshDTpK59NXd88EOYwWKBFI7H2XDbnYB7Vq1ysBQuTMZ4fiw+HfAwlA3xw8FG7mwc5aXxOKPZuTUWWyGRFepCM1bpPcyalf7dM5byynCmKODAUjg1nGJrU4TwVRH2ugJY5hrusvqVdF3IcP5MmkxasSwYHsi6hr4IMJms3sl7vjl58DQXjndiWzZqKxOjEzz9/54mkyovR6oZMGnftIb2jR3TQQqRmhj1bU4Yb6yhzjWNpVu5m9mIxOO4JRWIxONceO45Rrq7sTIZbMvCymQY7enm/LOlCWmqwVY4NFbP13o7ODDWWJKP1lLhiaEGRrMBnG/cNVV4UX8hs3T/6pj7UW1RKjIFJDK2awUHQ2DcQ4vzWSLmp+LDgrBsBK6q0nkx7em3N7NtOLL87mLnjl4s8XFUVbpPd89L/6u2rCNSE0MKNHszEGDnvbd5HqO2Te+pM5x8/Cm6j53Atiw2336bS9RZkC133UX3kSMl+WztXJbuwy/PyzlMcWwizulpu2ypJFPERVBKwZ7Lew1RVkVt3H4SsQDc2KQYogTyr5oA3NxW2U+/JiS4PV3bSsWhuT4LyQqONBMxCISLbbhewQRiBrFy4x79XI4cNUyhY328pLpAuQllvNq62mu9bEEebd3sUmorOUtmVLh1T+A91/hGAO563zt55ZkX6X3lNJHaGra+6nbatrgnn7HU4KkvfI7xvj6sTAYzFOLEo09x9y/8Eje/530c+ebDTAwOEq1vYPeb3krrzus599xBiqtDO4Tj9RB07OZ2mYmywTv5y6lkcSSYy5GummlA4I1rc7wwaNKdzFdtqLG5vsX9j6RGhA2NsLpO6Z+0CZtCUyzkVMko4xym7LLBAGysz3F+ND1tpjAF1taFMcUga+EauFBugACUn/zF63i3ZOELYZcFdxus6zavIIuFtOGu1GxhlSAi1MQDTIwXa1eGIaxeV8PQQApDYO3mBtZsrNwNajFoXddG34VLRc+wYhi0beyYtzFCkQh77t/Pnvv3z9n24gsvMNbbi5113B+sTIbJkRFOP/4oOx94PW2/9huoqpPRK39z2nL3fvpPHsfKXnaZMAJBNt/z2nmZvyqcnQiTtt0e550LZwrUBy1Gs+YMG6zSFrEImXB724zH+Dm0lpAprKl12ugVpjHc21ZDfSTIuZFJJwdufYS18eUb1bQi8ROQl8/23XW89NwwtipqO9pse0eM7XsuLzp5pUxcTCYTk4wNjVPbUEtNnaO5DnT1Y+csDDHAYLrO2NabdlLXPL9BAOVy6fjxaWE7hW1ZXDp+lJ0PvB4otWM2bdzErje+hcPf+Or0Y4VtWwxfOEvz5uoS3QAcTdRyYqIWNzOCABtrMqyNZmkNWRwajXA+GUI1X3bcUG5ozLJUP1sRYX19mDW+kF3GiHe5pWXAshK48fogt97dTG9PimzGpnVVDfWNy8fFQ1U5/NQJLr7S4ySAsW1WbWynpaOZI09ddtcyDINYQw23vukeEsNjPPqP3yGVmKRpdQu77rqemqbFOadofb1rgclI3PsJwbYseg4fKs7HZ9uc/O63WbXnempb2yqeh6oyfPYkg+dOc3zH+7FLVp8cp6+d8TR76tPTW29qTLE5btOfMokGlNVRC1NmWzrz8fEDHyoiFDZZt9Gxz3oln1kqes710XmqB9uyp+11ved7uXSut8h+Z9s2ydEJes92c+ypl7DzgvjS2S4Gu/p4zfvfTii68EJ38x130P3yy0XmATMYZNu9rylpO3zhPC9+9R8Z7+v1SH6q9J04WrbAHTh5lJPf+TrJkSEMwyQ9PooVjmNv++mS0EsBWsI5agM2Vj7kdYqGkNIQuvIctqrKxYTN+bEchghb6k3a48tXA/JiLGMxmrEcG3TIdK0zZqtiqWPnrsQD45pCWNTKG5WysItmhkEgUlzDqtoMXlUvhIH7olUZi2YXTx8uMfZ7Gv9FOH3o5LSwBUCdRYSLJy6y5bYbZ4xVXSXdTMbmyDf/Hz1HjyCGwdobbmT3j72F297/sxz+xtdJ9PcRbWhk9xsfpHnbnqJjU2OjPPXZv8HKpEv6LSQxOEgmYxGsqS3Zp2Zk+n3fkYMc/NxfYmdnuMNlhyCdLDkvBfrTQQbSAQ6ORHlVa462qTXGK8gWVsjB3gyd49m8LVgZmLTZkQu6Rnu5BwmUfr+5CgIHqq6aa9m8Mp5hMJ1zgpEFAiLsq4sQyj8p2KqcncjQn3dPCxnClliI2oBRdQYvr9+32/asSz5ez+M9FtOqx9dwrxkqCrRQJZcpjdW1cxYTw5Xnip2LZ77wOcbywQoAFw8+TzoxwS3v/Rnu/dX/OOuxnS8cQO3ZfUntXI6u55+i87knuemnf5H2vTd6tj3+jS+VCltAUELf+XMyD37UyXNrmDCd3cAxLFiqPNYX4I5Wq6wquJatjn9sXqGzVelKWFxK5AgYcGHMKjJBWAonBpJsbowQ8MhhkMrZjKctakMm4SXOczCStRhM56YDNVQho8r5ZIZt+ZI355NZ+jOXzzNtK8cTaW6oiywfv89FRJfxWfsCtwI27NlE/8U+z3I1U5gBk6Y17RiBAL1nLhQZHc1ggOb1a+Z1XmO9vST6+ooKN9q5HH0nj5NOJAjXlmqkhWQmkiW+t25MacAvfPFvuP/3P0kgHHFtNzk84NlH8NSTmF/8FbL73khg332kwg0zWjgC7tCQSUcs5xrQCzCcUp7vyzGecRbUtjQIu5oCPNWTZnDS9owwA0dLnMzaxMPFmpBt2zzTlWBgMjcdarEmHmJfa8zzET2ds+mbzDo1ziIBgvMc/Tictlyj4kYKtMm+vPZbcmzWojm4fLW9hUE8XRSXA8v3VrAMaV3XxvbbdnqWIUeEWH2cnXffxK1vfg27X307wVAII59I3QwGqGtpYvX2K6uy4EU6kXBNGiOGQSY5dz2w9p27MWcmrTEM2nbuxQiU/njFMBg8fcKzv/q1m2Ydzxg4R/ixz5I78SReS2BpC1zSEABOmO1jXTnGMs7RlsLpkSwv9GXmFLbgaInRGcVNbVW+d3aUgUnnxqM44b+d4xk6x90jBXsSGR7tGuP40CTHhyZ5rHucodT81kwLGuJ605mq0KuqrgJ56rqsPGRZR5otQeDD0iSUKd5eZluXdltuvo4NN97ADz73VdITk8VzMwzu+qm3Eq5xDJA1NU3s//mf4eJLR5gYHqVlwzpW79iCMSOhT2JwiPMvHCA9McGqnTtYvTOfKtGtioPLvBo27XC1NRqBADXtG2BG5YyZNtDGbftYc/Or6HzuSVAbMQMEozF2PPiTDHzi90v6VQQj2oBtFgSfFPS568c/zNOf/Bh2Loda7gJIxcBu3oibexiAaQiBYBh1qRhxcUxQivu1FLoS1pxCxhTY0hBBLSVb0Pj8aIqUy8EKnB9NsypWXGnZspXDM4o5Arw0kOSu9tppjbiiwAOX8ZsCJp1ki25LBrAqZJLN20frTGHM5dhaQ8hmqrPLVhK4sBwCH1Sc39ZyxTcpXAGBUJCb37SfZ/7l31BV1FbEEHa9+rZpYTtFOBZl6x23ePY1cPY8B77yNSzLAlV6T75C9+Gj3PwT7/B8nJ5JMBJl31vfyctffwjUzme9F278yQ9Ma9ezISLse+f72fCq+xg6c4JIfRNtu6/DMAM0bd3F4KljlwWnCMFIlKbNOz37q1u7iXs++hdcePzbTAz2YwZDXDr0BHbeJKGBMHb7NuyOXa7HG8DuRvF8jM/a6ipYp5J6z9wXNITakIkhsKkhQnusVGv30mLBqTs2k9GM5fr92KokczY18/QoHzKEnbVhziYzTNpKQGBVKEBLQf8boyGOT6SZCjRToCNkEjEMrHJi5a8p/EWza5KmNe289kPvpOfkOXK5HO3btlDbWHmAw0v/+t2iDGBWNkv/mTOMdHXTuGlb2f2su+V2mjZt4dKRlxDTZPXe64k2llctd4q6jnXUdawr2nbj+3+ZQ1/8awZOOLkU4qvXccMH/uOceW+jTa3seMvPTGvTq266h3Pf+xeSiQSJ7a8hfdM7XBPogLO5Nep9u2mvCXBisFSwtsYCJLI2k1l7WiM0Bfa2xYqqKrhpkpGA4dgxXFjjUno86LGYpornYtyVUhsw2FcXmY4KnKk1hwxhX22Y0axNViFuGtMeDCsPX+BeVSSGxzhx4Bhj/SM0tDez7fZ91DbEXduGohE2XJ/X9K6gcJ1tWSSHS1Mrqm0z3NVVkcAFqGluYcur76t4HrMRjNZw64d/g2wqiVo2oZpa7yKKs9C291ba9t5KMgePdIecZz8PLIVnem0eWGe4yuSGSIAtjWFODaenF7cCpnDD6lpMEY4NJOlNZAkHhG1NUVa5CMyZbG2McGmi1KskaMD6eKm5qTZoEA0YTBQIdwHqwybhBUobOptvrYhQd7VU1l1gVqxJQQyzfD/ccqveVmuX9WobCJMYHuOxh37gaJwKE2MT9J7r5tXvfyex+oLzuMLkMzPbiirBWIxssriaq5gBatrWIB42XLfcs15JYlyPr6it44kgwQAXnv4Wnc98HzDouP0+Nt77ZsxQuKyxBo4e4OwjXyY9Nkz7znvou+6dWCEPGzWQzEFSo8RcbPu2Crtaa1lXH6U/mSViGrTEAtPBAHtba9ibV+5tS7FmJHVxs6HWBEyua45yZGhyWnOuDwjXtdTmk8JcPmZKw9zXGOXkaIqhvGbcEjbZEo9M21anxi+Zv2cCcmU8Z3ExlSVlKVFTWBMOUjtDgC9mQhkvW2uuTJ/bRffDleXtpeBruAWcejYfFTb1e1bFyuY4feBF9t1/97yPJyLsvO8+jj7yyHQ0mJgm0fo62rZtn/fxrhQrm+GJ//EbTPR2Tm975eufo+vJ73DXR//ystD1oPuZ73Lk//7ptA3X6O+m8cSTNPy7vyGrBp0Jd8+CuRTF2pA5nRrRayGqkIxlc3EszVAqR9AQWqJB2muC04K6LRaiLRaafnQHb+EGEDIM9jbGpkOny5jCrCQtm5MTmWmvg4SlvJLMsDMWIrrMku0vX4SFLgZaDb7ALWBsYKgk74CqMtY3uGBjbrjlFoLRKKefeIJMcpJVu3az/TWvXZDaYFdKz8HHmegrzemb7O/m7Pe/ztY3vGvW409+9W+nhS2AncuQGexmde8LtOy9g95kmgIXYifUN1r5o3nGsslYSixolIS+pnI2j3eOkbUvp33snsgSGITbVseJF+S0FRFytpKzlQBzh8lO76+yam5PQYDDFDZwKZNjU3R5hbkvZ1asSeFqo6mjnfGBYbRAVTFMg6a1qyruS1Wn89DWr149q7dAx549dFx30xXNeTE4/6NvOt4PLpz65heJNjaz5s43uO5X2yY9WnrDsnM5Ji6dp3Xfnbx6bYhnL+UYTTtjtNeY3LKq/EKLtiqHLiXoTmSc7HwiXN9eU2S7PT2SKhK2U+QUXuyb4O61ddN9nRiepGci65THEmFXQ5Tm2coCzxNpj8fsdLWq84rCXzS7ath66z66T5whl8liWzaGaRIMh9h883UV9ZNKJHjmS/9McmTUyTVrGNz8E++gpYLKuoUkhwY59sg3GTp3llhzMzte92aaNxWnShy+cJaTjzxMou8SjRs2s+MNb6WmzT2iTVXJJMYxQyHPaLEpxrvPM9Z9zruB2hz58qdov/FeApFSISmGQbRlNZMDPUXbjUCAuvU7AGcB6jUbashYioi3B4AXJwYm6U5crjdmqXLwUoJ7N9QTzT8pDKWynlnGJnM26ZxNQISzY2l6kllH01RHAB8eTnJ7a63jybCA1AVNkjOixgSo8+ulVcaK1XDFIBAqL/DhShPKXN5efdtIQ4x7P/gezr7wMqM9fTSsXcOmm64nFJshSNySyhT0efBrX2F8YLDoEfPAPz7EAx/5TQLhsOtimNtCmG0ESSfGePSvPkE2NQmqpMZGeebv/5rbfu7XaN7iCKyRC2d4+m8/MZ2/oOflg/SfPMqrP/o/idQ3FfU52nmWQ1/4KyaH+lCFVdffzr73/HvMGXOyshl6nn+M84992zvbydQ8czlGLpymedfNLucVYtdPfYRDf/MxZ35qY4Qi1G/eS8PuV00nA7dVmCrXVjiamw11ZpDHuZFUif1UFS6OpNhU59xQYqbBuEfpSMVZ3MqhdCYyrn31TKRZn89dUEnggltbL7tws2EwKI7WbeP4IweARhUyBS5rlSxEVbuQVVGQxDIIfHB80K8BDVdEHgDeBXxKVQ+JyM+r6qcXbmpLQ7gmxs67b3c+XIGrVzaVYriz08WeJ/SdeoWOPXsr6u/CM084C2oF/dnZDCf/9V+485d+C4CTj3y9OFmMKlY2y/nHvsOOB989vTmXTvHMp/6I3ORlr4jelw9gBP6O697369PbrEyaJ//0I0wOXJozg5gzno3lkqxmipa9d3D7b/4t57/3T6RHB2i/9XV03PmmeUsh6BXaOiXrcraSmeWxvCkcIGgIlq3YLnbYwr4WkoAIOyMhhi2bpGUTMw3qFNdUjD5eXDsJyH8W+HfAb4tIE3DDwkzpKsfLmR9wj4qfnURvN3au1D90YrD/cpv+SyX71cox3tNZtK3vyEF0hrZqZzN0Pf8Eu97zKwTzKmbn098jOXCpaKFrVsQgGJs9QU583Tb2fuC/OB+8njyukNU1QTrHM8XhrwLtNc4N8+WBJCMeQQ0tkQB7GqNFn/smcyWhtIthwwVHuDYHTJrzPrULV/vLITfaTfbiC0iknsD6WxFz+QqrspknDVdE3gB8Esft4TOq+scz9n8A+B9AV37TX6nqZ2brs5Jf0biqjgC/ISJ/DNxawbErhmA4TNP69QxduFAk3BSldVtlgQwAzVt20Hv0RaxMgQYpQuPGLdMfmzZvp2t4qGhhywiGaN62u6gvK5Mu0pQVIfuqnyZ76zt5uDtKbUC5pTnDwIlD5QtbwAgGqVu/dG5sO5tjjKUtElkn3NZW2NYQoS5kks5aDKZKs2mZAnsao7RGiwXM1roIiWySScue7mtdTZD4NZh1a+LAPzDx3JdBBBEDAmHq35nmsXgAACAASURBVP6nmPWrl3pqVSDz4qUgIibwKeABoBM4ICIPq+rRGU3/UVV/udx+KxG435x6o6q/JSK/MtcBIlKSqKUiu6qb4/8CBj6U1c6r34K2N73nfTz7+b9nvL8PMQxMM8At7/sQgRrHnuqaQNsjGGHNrfdw7skfkhzow8pmMAIBjGCIHQ++B83PY/sb30Xf0ZewMmnsXBYjGCLS0Mzau944HbgA0LL7NvSh/z39OXvz28ne+hMQiqLAeE54rC/ClrU7kSPPlySeadh6Pev3v5XDn//vTFXVFYS9H/gdjGiT66KUiomtil0Q8lpuom9VZfjkQSb7LhLfsIvatdvzxxe3E+DW9lrGMxYpy6Y+ZBIyDSxLSWXtfHH1UnKWFgUpTM3r+oYI4zmbjK3UGkLIMMhmS9uVnEOZyb4X0y7qdbw1fNERtpZzI1eAbIrx73+C2jf9t+m22Yz7k0HV9uI5UpxeMcJ8abi3AadU9QyAiHwZeCswU+BWxJwCV0Q+Cfyaqn69cLuq/mU1A1/LhGvj3PNL/4HE0ChWOkXd6jVX7FdrBkPc9R9+h87nnmTw1DFq2ztYf9cDTtnyPNGmFu752J9z8Yl/Y7znPI2bd7H29teUZGqLNDSz+yd+nqMP/R1imuRuexfMuCHaCnLzWzG+/xUnoU5eVBnBMNvf/iEat15Hw7ab6T34A0Bpv3E/kaZ217lbtnKoL0HnWBpVqAub3NIRJxac+1pY6UkO/dkvkLx01vGNVmi+/tXs/MAfUphVVG2b/me/xaUnv4YYAVbd8+MEb7hcYThsCGFTmJyxUKUKDSH3P6aIUJfXaN0Wwq4Fshefd1lnUKxLR4oCP642VAWdJWy8gBYRea7g86dnrEmtAS4WfO4Ebnfp58dF5NXASeDXVfWiS5tpytFwx4GHReQnVTUpIq8HfldV7yrj2BVNbUtlyWO8MIMhNty5nw137gfcteFwbR1bX//jc/YVv/l1rNp4D9kzL5KoaSjR/GxAw3Hu+MgnOfHVv2P0/AlirWvY/vYP07jVcY+LNLay4bWzBzsAvNibpHM8O73gNJq2eOzCKPdvasCcw/Xr/L/+bya6TmHnLptSBl96jIFDP6CpQKCe/vJ/o/+5R7AzTqrMxIUjrO46xfoHfxFwhOeexiiHBpPYajNlTd9RF/ZMMmOlJ+n74RfJDF+i/rr7iW+//aoVQF5IuNapuGHPWB8IhK/yc1XP0OkZDKiqdxq/8vgG8CVVTYvILwCfB2ZNZjKnwFXV3xaRnwJ+JCIZIAH8VpUT9VkCTowFOToWwtIoxvrX5Ff3L5e4Ace2uboG4s0bueWX/+sVr/jaqlwsELaF23snMjSmBhDDINLsbi/sf/67RcIWwM5M0v/8d6YFbnq4l75nv4UWtLMzKbq++3na734H4Qan4KXRd5raL/w2qaZNqBkknkvQ8FO/CzSWjJu8eJyTf/Vz0/bw/7+9846S7Krv/Oe+UKmrc5jpCZqgGYUZZZCETLAIIjiIxdgGYbBZFmN2AbPYsAdsg31g8TpwcATbGMTaGBYOwWvAwsgmrSQQSAJlzYxmWhN7Uk9Pxwov/faP191T4b2uqumuMD33c06dmXr97n23q6p/dd8vfH9nf/wNUpt2sfO/faLKEIkIuUOPUjj+NMnhLaS33tBRFYLLkdj2U+S+/4nyL1wzSWLXz7ZrSatGZbXoeXIMKJXO28S54NjidUorej4J/EmtSetxKbwY+HVgHhgF3iQi8XL/ZYNNSFQobbXJr3pe58asVUWsS5RNIHDWS2GqgF7TiW8CucLGiPWOLz2v4MMTM4pg4Xar1LNmLbQeF2Bbj8lAxj4nJ1Gn0E2lq84LJLLSNQiEvV/6a9QDXwaEzPrt7H7rR7B6y90SZqqrerAyMNK9S/7U2WPPYFgJ/ArDTODz6B+/nq13fIDMtuvY8zdvx8/NYJ4+DEDesBj7zPu59NfLvWJBIBz49LurquoKR5/kzI/vpu+6ly6dJ77HkX96D/kjT0Dgg2GSGNrCxl/9Cwz7nN88yofpuR6FsR9RHH8Sq38DmctvxbBTLcujDY8lSL38Dyne+xcEZ58Bw8bc+TKMq+7AKXrLjm9kXV6Mrzbu+GqwOvaWB4CdSqlthIb2tcDrSk9QSo2KyGJFz+3AU7Umrcel8LvA+0XkXqXU1cAXlFK/JSLfbmj5a5xTbpr7ZjcRSBj97zJdXtB3kozZvA9WI0wWQs9n5Z+EArb1ghsYXNJtMpSODzjMuwHzTkBP2qxZdWUZip6kyXRFOlbgufiP3Y3hhlkQc8ee5vG/eRfXvfdzZedtfMkbePqfPkjgFJaOGVaC9c8/5zZJr99WtQtexJufYv+nfhuzq7+660TgMX/wUbzcDFamZ+mwBD7+3GTkfFMPfW3J4AJMP/wN8ocfR9xz63NOjTF1/xcZeP4bIueAMF3v1Bfeg3NiD+IWUHaK6Xs+zfo3fBzS1TvuZmL2byXz83+G+A4oc+nL+EJGFqoDVz6PeEqptwPfJEwLu1NEnlBKfRB4UES+CvymUup2wAMmgTfWmrcel8KLSv7/mFLqFcCXgZ86r99kDeKJ4p6ZTXglKkWzfoIfzIzw4v7jy4xsHWkrOlIvwNg0KAIOzwZcPShc2lf+sQhEeOhEgfE5D0NBIHm296W4aiS9rL/v+tEs3z88s9QxQUSw7/kUxmxJk8nAJ3/yMPnTR0kPb1o6PHTDbRSnJzjyr58gcAtYXX1sf8176dp42VKlVqJ3mOGbf55T9305egEioQGNiVqL7zF38BHGv/5XFE8fIjmyNfZ3MTPl4vIzj3+nzNgCiOcw99R3ljW483u+u2RsAcQt4PsuU/feSd9tvx07rpmoxbu7prUuby2rtMNFRO4C7qo49oGS/78PeF8jczaczS0ixxfcDJoFTrjVAuWC4qybpBgYJI32f5D7EtBtw7QjSEUBRmkg/rEzHiMZg+6Ewcmcz96zLrOOv9QMYdEn+8xUgaGMxWh3tNsj5/pYCl60pZcjM0VO51yM3CSzJ/ZVn6wU4lcXd2x84R2sf/4v4RdymOlspHHf8ur3cPaJe3CnTsX/8lJxl6EUyXXbcGdOM/apdy0Zv/yRJ8LClYi/2OHbfr3sudXVH3mumansQlxObv8Pqww1gU/hmQejB2gaRjpY7Oe8PPwikq991sVE/Bu8kpu0Oc/gkak0PziT4XAusaLyUqXg+euFS7JgGZAwotcW6gYEHJn1uP+4y0Tej+w84wscnq4ujsi5Pt89OM13Dk7z7YPTfPfwNE9N5jmV9zihepj/xT/Cuf72sjFWVx+FyeOc+uG/Upwsr5pThomV6Y7dSSul2H7HB1B2fPWakchgJDMYyS6MZAa7dx1bf+XDnPreZxCv8ndQGOlSsXmL0Ve9j9TQlrKz+m/5pSqBfGWn6P+pO2LXAYS+aqN6n2NmB5cdp6kPkXCjXuvRLpouXlNVvLDiwofmBM3iAmFRBBVBo5FUAPOqzO4qhIGEg20nqs1xZICs/NhE0eSeia4ln/CJYoKD+RTPHy5CSfllIHA8pyhiM5xWZO0Sw1Qxp23Cs9bDDQvX/9r+2apgl1Khr/TxM/na7cZRLAr/B74gIvzgyCy5kkmrOuHaSdxb30LqwP2o4hzKSiCBz95PvQ9EkMBn00vfxMaX/mcgusjAq5gzs/1Z7PiNv+HA37+DoFjdFr7/xttZ/9K3kDv0KMpOkdy4C2UYFM+MV+9mJSAxtIXNb/hT/MIcRnYEpVR54YMXYA7tZPiV7+fM3X+JP3saI9NH/62/gb3phrJigcpAVvrqn2Hmwa8gQYlf2UrSdfPrI4sM2i0oE3ct16nuxhwVCIvqDBF37mqxSlkKTUHLM64ClhJe0HeK+6aG8VGIQLflcktfdb+yevnJVBq/JIjhi2KyaHCqYDCyEMCf9+C7xy28IKz7EoTL+hS7BuJvXBxfeOxUgWNzbpWxhXDXu7E7waMnc9U/rGBLb/mXVOh6qL19MO0kG9/4R/Qoh/Fv/RNnn/xBGOlf4Ni/f5r+q3+azOj2mnMtktl0BZe++S/Y/3dvK9u1Jka2sv4Vb8MwDLI7wmr0RSOe3fkciifGwqDRAspKkN35HMxUFjOVXbbjQ/by55G9/HmhO8Sw6iqSsHrWMfhLH2H6Ox/DPbUfMztE93PfRGrbzU3XTbhY6GB7qw3uajGUcPj54WNMezaWErotb0WqRTNutdH0BCadcwb3xxMmRZ8yn+y+KWFjl9CbrL4FFxHuHXeYKkZ/IhOm4qYNoe5rNmEw58QbAFPBUEm78aIXcHC6WHNXDOGNwMDWK+myTZ7863eUGVsIMxkmH/teQwYXILN5F1e85wtMPvB1nKkT9F75PLKXPzc2N3bwua9h+rH/wJudQJwCyk5j9wzR/5xfbOi65wRf6vtLt0d2MvSaP2/oGpr6EETvcC8WDAX9dnXw53xIm0LOLzealoKsda5Q4XRBVQXAAoETuWiDe7YozMQYW4AeWzHcZeMHwlXDaR4Yn481oBtKgmXzrs89R2fqqvBRhCW1XQuls0YiiZ+veM0kYPw//oHBa19IYnhL9STLkOgdYf1L3rT0fLk1meluLn37PzDz2LcpjO8jueEyune/EGMZf7Cmw5GLeYdrdGjhg1F9vG5BGUDMiC4Jdfhl486dc0MfbF9CWKw23d0f8NCEUZE3q1jfnUSscLypXLyID9epvOKywVTVdXKBA8qJ3YhNFgIeOBa2qhGBjG2QtU3OFryl9jSmgoRpcGlvasmv+dTpHF6EYVML5w+n7SXFrvVpm63diaWxw7f8Aifv+QLilgevAifPvn/8AJe/89NV89Yr9A2hwfULcxSOP43du47EwIYlQRnxwi4Q3de+nO5rX47vBQRAUOGvhTBHNz/2IwpHH8foGSV9+a1VwkwtE59plgB5lA82rnAhwjcb6cNtYPxqsRp5uM1C73Br4IviYL6Lk26abtNlR3qW1ArEiAIJq7JsBU4A951OMu0aYYW/gpuHfdalhaFUhPKUwP5puHwhoD2YVpzMVZ83mY/+gxpMW8t++wuUtaqZd8OmjC/c3MOMGzBV8EhbBkNpq0wUO05rtjdhcv1QpkpAu9Q4bnrFW5g/8iSzT1enReWP78cvzEdXndXJ5P1f4dQ3P4YybcR3yWy/gXW3v5dTX/8Ic/t+AEDm0mcz+qrfRSV7I+cQ3+PE599D8fhexM2HxQr3/m/WveHjOrugw1js3tGpXBiF323CF/jW5CgPzw1ytJhlb66Xb0xuYsZt/HtKBJ6cTvIv4z187Wiau8ZT3HcqyVnHwBeFJwo3UPzglEnRg6fOVu5uwyqxAzPnng/HtCOL87ymLIMtvfFdLKI6G4gIEwWPgZTF9r4Uo9lElQHtiqg6M4CBlFWzW4EyLdY975dQlTKegFIGyjp/P3h+fB+n7v444jkExXnEc8iN/ZhDf/dm5p6+P/QdBz65Aw9x9DPvjp1nfs93KR7fg7hhNqS4BYLcFNP33nnea9M0iQWXQq1Hu9AGdxmOFLLM+jb+wssUYOCJ4tHZ6kKHWozNJ9g7l8SX0O+a9w0mXaPKB6uAH06YHJqPfmtK7wZHsyZRglcjmfgt+HXr0qQb+L4QwK3hm93Rn6pah6FgU0xRRCW9V96CaScpzQxWVoL+626L74FXB9OP/DtS0S1DPAd/dgJKy30DD2fiMMVTz0TOkzsQUawgPoWDD5332jTNQ0RqPtpFG/JwY/6A6hUbb8AvG+VXhfoFWU7lupaM7TkUZ9xEmbB33PjS6+ybs8vSvOIIRDFRULHx7tEuEzHDW+xsGnYNFnjyTGHJJZEwDa4b7UZMMzqHNRBiNKUjEaA/YZXlvlYGorotk+sHuxibLZD3QgHwbd0pTFGRvt2qdSmb7W/5OIe/8AcUThxAKYO+a17Mhle+uyz/Ne764TEI3CLiOZgLhQtBI/sJZVCcmUL1lOeX+n6A6hoB0yo30oDZNYBXmnNbp7+2oTzaJuThNiIo00gebb1+3eWOrwYdXGimfbjL0WP6mARVRjdrNp4v6QVxxrZcHlEId4dRbqguC64eLv8S2jmYYlNPgtP5ANtQHJ8r8h9jUwgwmk1w9UgG2zy3/pNzzrLJS7Y655IQ4PL+dF3twXsSJtcNnr+vNTWyhcve8Wn84jzKtJd2tnHBsFICt8jxf/kIs49/CxEhMbSZDb/4+/Re81Km7v9SWV6uspLhDsevFr1Jrr88cv6ua3+W+Z/8c7kIjpWk66bXN/hbappNp6eFaZfCMmzryhPaqnNvoKmEq3obr2zekPGp3LeaCrJWOKelwDZg90B0q0lDwYu3pEla1T9N2wabe5McnC5wZMbBl/BbfnzW4f5js2XnLuce2JS1edGWXq4d7mL3YIZbN/Wwubu1KVJmsqthN8KJr/8Zs098OyxACDycU89w+M53YPdvYPhn3oWy0xiJDMpK0HXZc1n36g+h7BTKTof/WklGXvn+qlLdRazuEYZe81ESG3aDmcDs3UDvbe8htS2qAYCmrUgYNKv1aBd6h7sMCUO4bfgMj89kOV1MkLF8ruqeYygix7UWV/X5nCka5Lxz2rNbsnDdoDDrgotJXzLc6x6eE2ZLsrdMBTv7bcxlxK0LXsCp+XLBbwFmiz4zRY+eZPhWj3TZPHG6enzKVOxeyChY13XOFdLpAlLie8w8cneV+I0EPnP7vk/Pta8gu+tFOBMHsbJDWN2D+F7A5rd/kdzT94EI6Utvwjm5n/k93yF1yQ1VymAAiZEdDL82LFbQFWGdjXYpXMBkzICb+mfKjgmNB3ISJrxk1OV0QZELLAaS0LMwTU8CpCTq9IINBk9OBhybV1gG7Oiz2Na7fLTeWegyW4lSUPQEFjaqGdvk8oE0eyfzC81mwDAUN41ma2YUNMJEwWX/dJGiH9BlG2zvTtKXWJ2Pm4jgzZxG2UkMO4UEEf5ACZZ0FQw7SWq03F1gprJ0X/0y3LPHGL/zLUstesT3GHjpfyd71ctWZa2a1iJczFoKyogofGiOoEy9gbC4c6uCYA2Or7cLw7DNkqiMxJxrm3Dterg25vpRQtEpM8BQakl7dhEvgB+Nz7K+K8HuwTS2abA5m2Q4ZXOm4GIbiqG0DQJuRBVFlJZAVNCq1Nd6YLbA8fw5f+esG/DoZJ6re1NkLbPm+OWuVTw5xtHP/x7e9Mlwd7r1epKjl1E8vrc830cCklturCkIc/JfPow/P1k2dvLuP8fccD1m18CKCheC+TPk7v04/vhPwEpiX/lzJK755Vih75UWPtRbeLDSQFizrrVadLC91T7cTkdEmMi57DuT59iME1tFYyjFdeu7MBVVKVqBwPE5hx+dmFs6lrIMNmaTjGSq82pXwozrlxnbpd8DODjvUFiBj0I8l8Of/k3cM0cQz0F8l9zBH6OsJGamH5XIoBJplJlg8La3Y/Us38QzcPK4J/ZV/YUqw6B4aGX6tBL4zH3tPfjHHgwbNTpzuI//M85D/7iieTU1kFAPt9ajXWiXQgcjItx/dI7TudA3axqQOG3wgkt6SUZkDqzrSvDCrX0cni7y9GS+fAcNzDmhPzdj1V8qN+14jM0UmfcCum2DS3tSZEwDLxDOOh6GUvSXtBs/VamLUMKMF/DwVJ6MaXB5Noldo3NvJfNjD1YLlfsehWNPsuUdX6Q4/hR+YZb0tmdh1VEBpgxzQUS8/LgEAYZdXYjRCN7RHyPOXHl/NL+Iu/cbmNf9CipCE1ezOtTZtbct6He9gxmfdTmdc5dSxLwA/CBgz0SOa9dnI8ekLIPRbIIDZ6v1bBVQ9IVMne/6jOMvtBcPn08WfaYn5tmWTTA267C4MTaAq/rTdFlmzd1yAMz7AQfmi1zRHVMqF4PE9C9bJLPzlobmU1aC5OZrKR6qKGDwHbAbW1slkj9LZTNKAAIPFuQcNauPiMS6fDqBJvtwq8VrovyyEO2brRT6BlbsV427Vt2dcBs4N7brboS/Osqvd2x2tspoCnBizmFXRUFAqQ80oYj05/oCEzmX2YLHSNou22FG+VDHpvJVEV9fYP+sc24xgA/smSpwXV+aYdvkRN6NLS9eHDblBRRdf8lAx+nOlvor7Y3XIX6l709hD1yCb2Xxi9WujFo+0IDo3f78I/+CufGGBsVfzh2Xod2RzkTVvR5PEkRVn0Rfq72CMheieM2aa7GjaQ0p04jMPEiYy79thlJcPZTBUOVtdAR4ZqbI3qkC952YZbbGhz7XQL5iIRCcQMhYBtu7bMyKa68UEcFIZRl51e+HubOJDCqRwcwOMPyfPlB7gjic6g4RAFKYjTxeL0b3eqxdrwqDxMoI/7VSWM/5zRXNq1kekdClUOvRLvR9TQezpS8sZii1e6YKtQtqMZyxee5oN8fmHMZmyqUPhXCn+tTZPDeNRLsmAPoTJnkvKHNxLhrRqI/s4tfAcNJmMGFRDAQ/EJ6YLVbteLtNVVewzps9w+lvfIT8gR+hDIvsta9g41s/R/HYE6hEmtTma1GGed63kcmdt+Ke3g+lvc2sJIkdLziv+UpJXHcHatNNBOMPoewujC3PQyW7dR5vk+nkHa42uB1Mxja5eWM3j53KMev4JE3FFYNp1nfVlwecsoylXW7UR3DWDQhEYg3flmyC0wUPLxACQoNqG2HWg1syoQJ6bQOrxEVhKEXaVHgIOzIJ9ufO+V+ThmJbqvbvUBjfy9F/eCfihO1+JPCZfeQugvwcQz//O7VfgDpI7345xbHv4554isUya2vkMlK7f3ZV5jf6t2H0b1uVuTT10N4dbC20we1wBtI2P72lvPKpkdJEx5dY7YRat/0J0+DZgxlO5F3mvIAe22Bd2ibvBuyZKZBfWEdfwmRHJt6A9tom1/ekmPcDTKVIQmwX3kVm99zDyS/9QXVWgucwv/d7DLz0nRjJ89duWESZNn2v/EO8E0/hnB7DHNyKte7KmuvTdChyMe9wlQFWeXpNbBeFFRQTQEyAKqa7RFOuFRk0iw7IRAWogohb4rhv6qi758iASyD0JUyOEL3D3ZixF1TAJLbwQHxhXcJi3cKvHHiCJXBVdwo3CDtUmEoRBBKp0xCULCujjJK1VgT0SgNOIpz+149WG9tFlMKZn8EqKVZpREHLjfJdD1yG0bMjlKMsEVRvTseG1ilwNSMQFnc8aiPQarUwIf796QT0DneN058wGUlZnFpocbPIpozFljpdE3E0mkdbL+Lk8XPxHY/NdC9mdvmihjWPO4d94n6M4lm8gSvx+3e3e0Wdgeg8XE0bUUpxRV+KjW7AlOOTMhUDidr5su1EJVIYiQxBVKaAmaD/Z37nor7lN+aPk/nxh1GBB4FDYvzbeANXMXv5b8BF/LrAgjyjNritRQQO5RLsmUvhBIp1KZ9r+h3SK+hFdiGjlKInYdKzUBHWyTsACFvrZK96KTMPfrnqZ8O//KckRne1YVWdQ+rpz6K83Dn/u1/EOvM41tQevP4r27m09nNR73CVgVgVnRwaEZSp01daOX7/jMHj09ZSh4WjOZOJYpqXbRZMFeObjSiGaKTwIcqFGMT4FaPFW+o7D85PUKbs3DrHx80Rdf2VdiGo9LsVTo1VT6YM5h67m2z/ZTXHN3r9uDnOt/BhkWYUHqSnn64OdgZFjMmncDI7a1+/8joipOb3k515Et/sZrb3WQRWNnZNsfNGHPPjxjfSdqRB9A63xTxVYmwBBIUbCMfnYVN82qmmgwjmJqoPSoA/ewrnxB6C6WOYA1uwh3e0fG0y/gDBnn+G4ixsvAnjyl9A2SvPmKiXwOrGdCbL12Qk8BP95zXf4NHP0TX9MEocRFkMTvwbR7e8DSe1aTWW21JEdNCspYiE7ccr8QVyzftSvWjxpbIN5uqQ3PYcvOnj5X3ETBvn8E9wDj0QPlcm9uguen/uQ5F3KM3AP/Atgh9/8lyLnv13EZz4CcZtf8rq1tbFk9v8c2Sf+TwqCNcgKDBsCgPPbniuRO4QXdMPY0g4lxIPEY+R41/k6LZ3req6W0Nn5+GuudJepaDXrn7BDQVDre0Ws6ZxA2Ffvsij80UemS8y5rh4qyhE2nPzHZjdI6gF1S5lpULjKyUGWHzc40+Q+8kXV+26tfAf/Wx5P7TAg9xpOPFwy9ZQXPc85ra/Dj85hBhJnL7dTF3zPsRqXOEsNX8AJeU7EQUkC0c6W1h2GS5aeUZBIWbt7rbQgKBM5XyLx0vOvX5EuHc8IJBQncpUYbfbvoyNKFV3Hm6sUHSUDzTKr1mnqHbceC9O0KXO8Y34ZUvPdQIhQEgqVZZHu7Qu1+dp16O0YHg2EMaKLtuM8sik7wcUEaYJRW6yQNqr3hVX+T+NDAN3/C35/ffhnz1KMDdBcc83qxcjAYW938a86jXRv2uUX9X1EQlCw2kmlzIeavprJYDidMQSPNyzx3C7q1OzmiUIU+h5NtO7y3e0QbE6b7mWr7Wosoiyqoyub2RwHC92rZGva5QgT4yvtlk+XLmog2ZtYiCluO0Sg0OzioIPoxmDkYxxUacS1YMXCAfyDvNBaBAtBVuTNpmKXmoFgaiShALgiJAoeZ3nEMZZKHNQMCuQNWBdHW42ZSZI7vhpAHIP/Z/4E2MU6KLwDt+P86O/h/xkuKpUH9aNb8XYeGMdCzKgax3Mn6xcKNK3ve41dBJz2asYNr6G8p2lJqeBsjnd96I2r+z86eSg2ZpzKSySthRXDNhcN2yzrsvUxpawgms87/KTmTwPTufZN1+kWLKFHSs4zAVhKXAAOAIHCm5Vl4kgplhYQZlIjYhwEpDF5mkL/58zoFg9fFkSW58TrSGrDJJXvbKuOdyx7+Hc8xHIn2Gp0q0whff9jxKcjciKiOLaNyNmAln40xEjgQzugojMiQsBMWwOb/lN5rK78VUSx+zjxMDPcbb3ee1e2vnR4Wpha9bgaqoZL7gcLbh4EpqbaS/gqbkigQieCHMRqTewyQAAFBlJREFUbgkB5ir8CumYLy/FUq9KIDS+1Qq1IYUGv/+swW2kb3x9uMssuWJi9+0kLntJXXN4D3829LlW4rsE+75R30JGriHY9YYw5REDxA9dE36hvvEdiGf3cXzjG9m77YPs3/I+pnqfc8EWUAihAHmtR7tYky4FTTUiwnjBq5JJ9AWmXJ+uZVqwV24IDKW4xDI55PllvtjNqtxtYyw8oj7e55NTkLnhl0ld/mIKhx9BmRbW5meVtMKpvWuR/GTcT5DidH05BsVpjCc/g1oM3gkwuRfjsTvh6rfWM4OmmayieI1S6uXAXwAm8EkR+aOY814NfAm4UUSWbYbX/MIH8/wLH5ohKBOeW11yFhWgihKUgdpBp3Pjzy9otdx5cfPWmlNEiApTCGHbnawIKQX5iA4TKTfAKeno6/sBSeBSYFG+O+0JBj6VTXB6RZiyFbJoiEWwAsEslJ9bdzGB2YvaHN7uej5LaWN1FT70b4cz+6pPMmxkwy24TvXutzJoZBy5H7OydZF4MH4/zs43Ve0Mm9E1t1niNfUGwiA6GBb19+JF5WjGjF8NhNUJmimlTOBjwG3AUeABpdRXReTJivO6gXcCP6xnXu1SaDNeIOS8AGlyCo5SikyM2Ex2oYPEFtvG5tzO1CDctcbpLpgoehYecR+kXl8YcgU7EMxA6PGEdXm/RRmr5Zg3vDlCQU7ByDWw6bn1TRLVpyz8AfXsslcbw5vH8HMtv24ns0o+3JuA/SIyJiIO8HkgKljwIeCPCWPGNdEuhTYhIuyfKXI854IKjduO7iQj6eYl8G9N2+yZd5ZMgwEM2iYZ08D3ApKG4sqkTU6EQKDLUPiVvdNE8BCsOk2mArK+kC3Zlber/kT1b8d8xV/iP303nN0PmSHY8kLU4ELAK6i9smDdszCf+lzZMVEm/vB1Ff7l5mK6U4wc+QdShSMAFNJbGR/9FXyrp2Vr6EhECKJyGRtnI3Ck5PlR4ObSE5RSNwCbReRflVLvqWdSbXDbxNF5h+O5hWaLC/nC+2aKdNkGXQ20Ma+XvB9wvOhhEurXZk2DQdukq6I/mlKKrpId7aIJ8kU4KgGLeykbYQOQbMte9fxRmUHU7uic3bpI9ePs/nUST34SFoJmQXYjzq43rdoaayLC6MG/xXZOLaVypXLPsPHopzi89UKsDls9ROpuUDmklCr1t35CRD5R73WUUgbwUeCNjayvyQbXqL/wIUIsfKV+2VgfaISvql5BmdhzGyg88PyAo/PVnW0DYHzeZWtmIRE/YrwbCGccD1+gzzJILxjMqC/1RZ9cMRD2Oeeu54pQ9Hz6BBwVlJ1b/XuFx48pmF9M71Jhvu1hYKsToOoYH7WuWsdWZXydgjJxxyN9oAM3kL/lzzBnDyJ2lqBrIwh4dfiAl71+nf5Wc+4Ilnt2ydgCKAISzimYO4FjDy07vhFBmfjChYj3oIHxjXQtaQSpv7R3QkSWq4U+Bmwueb5p4dgi3cBVwHcXAsXrga8qpW5fLnCmd7htIu4jUZnzWsqM57Nv7pxLYLwIG5MW65Pxb6MvwkGn2rgLcDoI2GzW3k37lBjbRZRCRMgryHRunnnzMJP4fZe35dIqcIhSsBAURlAZtqxN0pvACuaZkXXRFZ8XEsJquRQeAHYqpbYRGtrXAq9buozINLD0zaaU+i7w7vZmKWhiGUqaHM+Xd2EwgKFE9FsiIhyYd8oLC4CjRY+8HzBsW2RK3ANOIBwtukwtY8ALdQbqhPhGlEHcDzRNo5DaHPqLKzNKlE0hsb7ueYygwI6pfyLjjiPKRIkwlrmdyeSF3T1iNbIURMRTSr0d+CZhWtidIvKEUuqDwIMi8tXzmVcb3DZxSVeCOTdgzgtQKsx1HU1Z9NjRO05XwIv5HJ3xAiY9h0uSFoO2hSfCU7lizeBUV53J7RZh3qyzaHlLSHeuEt7aRZkcHf01No3fSekbcmjkVxsK3F0y83W63GMY+EuiQNtz/5c5ezOOcWEG30QkNp3zPOa6C7ir4tgHYs69tZ45Wy9AHnPL0gxBmVi/Xp1i31Fzxp7bQB7u4vhd3SnmvYBiEJA2DBKGKssHLrtOjd2oAEeKHtkAJvwgstig9GQD6PMFx1vIY63hAx1WcDxllm2qBvIevhfm9zYkQF6nXzZ2fOkxZx6mDuDZvdBdrd96IeXBNiReozYzPfo+uov7ERSzqR14ngH5cpdCZM72gl+1v/hEaGwr6Jl/guPWjWXnVq0h0l+7sjze1UKL12hi6bIMujBiA3yLmEoxYBlMenFKBiEuoatguXMMYFsQ3ifViy2wOe9TMBSeBKQ8aX8S9zN3w2P/CIaFKT7Su43gpv9R1SmawAVlXbDlqnEERoLpdGm7oUaN2Np6PWAhS6FJHYFXA21wLyAuSdlYRY+TMTs0IXxDM0oxE2N0FTDaoLEtHZsOJHbn31JmjsJjnwmNaeCGpmPqAMaTnyW45s3hOWeeIvHI36NyJ8FK4+14Ff6Wl7Vz1R3FhLWbIe/xql3uGfOKNq1o5YRZCp3r52r7JkVTP4ZSbErZsd+SGRZ2wqaBTfX+pRfYrgzOtxmMADlTMW8Z+O3eHI3fXy5GDqjAQ43/IHwy9Qzm/R/GyJ1AISgvh/X0lzDG72vDYjuTg+mXM2Nego+FRwKPJHvtV+Go7nYv7fwREF9qPtqF3uFegMTdMC2W7hpKscO2OOP6zCMkgQFlYC/cUscpeC2Ho+BE+pwPVzAZyPt0xfhem44yibwlViZIgHn/H1aV4Sq/iDX2NZyRW1qzxg4nUEn2dL2BRDCFLTlmvEFEXfgmoZN3uB0jXhMVDIvurLAyQZlwjsbFX2qd60ekEDTS8aGRoF8aqKyeVwJpX3BKeoB1ewGLexUpEZapN5BVeu6prB0G4kr8oJNpE3PSxZT6CxeC6aO4D34KzjwN6QGMa16HsfGmZYJmMYGkdTdh7/1KWacCMWy8Dc/HP/4wZmkb8RJU4SyOEyWf3kDQaoWdbBsZv1JBmXqKGYpkgMzC34W37LmNzBue12LxGtE9zTSrzKgyKN3fKaAHiG4+tHICBZ6pIoNOE/0pHKu+j5Hkp3Dvfi+cfBS8HMweJbj/zwnGl80VjyYzgnftf0WsDGKmEMPGH74ed8erUaUC45VriBIx16wpgiCo+WgX+tN3AZJUih0YzCB4QBeKhASoij2dQyj0bQFpWUFMOm7DoBSi4GxPgsGCV3N+f+xb4LvlE/oOweOfR73ohsaXNXoj7rrrUXPHcc0sJMLc0aBvZ/waujbH/kxz4SMi9WoptAVtcC9QTKXoLzFxpYKHgnACmC15d22BTf753dIYQNoNyNtGbGqVkzRJFpf/oMvsiTCroJJYYfB6FmchPZuh5I9Mshvxh67FnHik7EtAlIWz5RXnfy1N5yMXcR6uoBCjXIAmXlS7PkGZuE62K+2a20jhQt0C5DF3LvWKr5yvoMu8AbNWieg34CCcloB+Jzgv8Zeuooffm8RJmlVGVwj9kqpYHY4rnVeGroZD94JfLBmrYHAXTiFaA6CRYoBSCle8jfTY50kd/x6IIIbN3CWvppDeiZdf3WstNz7yMxwnAB51/RYKyjRyrcgu0w2Mb64A+cUaNNO0hXmj3NgCoBQ5y6A/JohRCyXQO1VkciCFH7HTtQp15D5suBnG/h05ewDlFxAzAWYS2fW62mMbXrAif+kdzG56NYY3S2B1g7H6speazuOi3eFq2oMhhCU3FUZRrcLnsHeqyFR/kmBBKEcB2TP5uuZWhok8//3I0R/BxJNI13rY/HywMwv9cpqAYRIk+pozt6bzWD0B8qagDe4apCcQZkxVFutSIvSsQjDBDITeUzl8y0AMsBb1cOscr5QBozciozeueC0aTSUNCJC3heb6cAXcihYt8bmt1ceaISgD0f6naH9x9DflcmLftY7FnrtSQZeK8YOeYjJpERgLu9C8R7Lg4zVw/dhreQE4fpmhjVtrM3JTmyEo06xr1euXhfrzWCXmvWqGoExjTSTjhXLqnXelNCBA3hb0DneNkvaEdYUiokJXQrsrcTWaliDN6yaxGmiDu4ZRrI7fVqO5kIi7A+gEtMFdY/gqrAyzOvczp9E0DdE7XE0rEGAyZZKzjdB9INA/75JyteXVXESsYseHZtDkwofqQoXYTrYR4i/NCITFzdFIgK7uwoVGA1ErGH/WNsgt5McKgILJLpv+iRxmxe/RjK63K+5i0EJBmLi0oXrXGhsgrFvQZaXiM/VfP+r2uhFBmZWuVWJea98/H8262ojEvz6dgN7hrhHy6YiOBgqKKYvMfLQ6lkaz9riId7ia9hPTAk7TRjLBSba7d9Mt4zh0c9C6lTPWrtoDNbXRPlxNK0gWPQqp6l1usp6SW03LsINZrnH+ERMnbFnEWS7zvsZeZXGaS9u9vAueMGh2se5wRfAqgjbtFpQJj1cfc6N8ZecpHtP08RHHU7kAdzCDvxA0EwWpyQKS86h0KERf68LvZLuS8VC/2He8oEttf+l6/0GU+GXfiyYem53/x7izZUXXr1e8JlbEvxEBcTdCqCjCLxsEMa+13yw3V3tb6NRC73DXCIZA70QOzzIITIXl+IjOUOg4UjKFqaqNUIK5NqxmDXJR73A1LcfygqUuKZ1bUX7xMmlcypC3B0ud2+EFojjL1vYtag3R6VkKusXORYoAXsbCzSYITB1ZaxUT6gpm2IAnYW8/T2xcMozxgjavbI2wkIdb69Eumi9e49Xpw11hY8d6BWXijrc7j7YZ410nOmDmKvC29cNCl19UBo5OoyYrW1OuPA+2XgHudgvKQHMaI0Yde9D/BYaMg/SZx8gHvZzwr8AngRfxfq00N7ZekZm4eX0v+jMU5YONOiYS81o1yYcr6CwFTYfhb+wBq0JEfFMvMltAab9vCzCYCLYzEWxv90LWHtqHq+kkRIFk7OoiCRHoScGZ6l2uRnPBIDpLQdNJyMIjym3bwTsDjaYeRJqntbsaaIN7kaEANZVH+tLnfLgioRGeKS43VKPpeC5qH65ItShNKwVlYoML7S5caELhQyPFAMGhs+Gb058JDxQ9vP0TUKgOZLSq8GCl4jVxgbCVdiFoLGi1ssKJaPGZ+rrjxs3bSCAsKsAVF9yqN2gWJxTUtMIHEa2Hq+kwBDg0BYenwl2uL81r4qjRtBKtpaDpWITQ2Go0a4SL2qWg0Wg0LeVidimISFXhQ6wPN8rX1gS/aOy8Kx3fjMKHNgvKtPJazRKUab8PtT5BmfjrNyAgXqegTJz/NEpoJk4ovFN9uBd1m3SNRqNpLYJI5xpcraWg0WjWFEEQ1HzUg1Lq5UqpvUqp/Uqp90b8/K1KqceUUg8rpe5VStVUkdcGV6PRrBlEBJGg5qMWSikT+BjwCmAXcEeEQf2ciFwtItcBfwJ8tNa82qWg0WjWFHGi5w1yE7BfRMYAlFKfB14JPLl4gojMlJzfRZgksSxN79pbGQxrViAqsmPDioNWzSpc6LxOtq3tmhsRIG2zglcj12pIbWulHRsiAmGNBKKij8UVPkS913GFD/UF4+L8qc3q2hv6cOtyGQwppR4sef4JEflEyfONwJGS50eBmysnUUq9DfgtIAG8qNZF9Q5Xo9GsGUSk3gyICRF59ipc72PAx5RSrwN+D/i15c7XBlej0awp6g2K1eAYsLnk+aaFY3F8HvibWpPqoJlGo1kziAhB4Nd81MEDwE6l1DalVAJ4LfDV0hOUUjtLnv4s8HStSZvrww0Ep6JNd7sFYWLnbULhw1roZLvSa0X5ZlfaiTa6GGBlgjJxa2isa299Qjmx148QlVlpF4WoY3F+2ZWK10TtLBsZv1rU6cOtMYd4Sqm3A98ETOBOEXlCKfVB4EER+SrwdqXUSwAXOEsNdwJol4LmAiQrJ+jnIA5dnOZyApVo95I0HYOsVpYCInIXcFfFsQ+U/P+djc6pDa7mgmKH92+sk0dRBASYbOfb/IRfZY6edi9N0wGINDMDYuVoH67mgqE7OMY6eQwTD4MACxeLAjvlm+1emqZjCEt7az3aRfO79lb48BoS1Y7w/63ULxt7bgP+4lblwbbSBxwX2Y0U+25E7H2FftHSc3vUAQzDK2sPZCD0yWGKczF+yUbEX1ZxrUvXj/Rrtk4Qpt5jcfM24oNdqQ94tVilLIWmoF0KmgsGhww+Fhblf6wuqTatSNNpLJb2dirapaC5YDgllyMYSEkygCcWz7g3tm9Rmo5jldLCmoI2uJoLBo8UD/mvYyrYgIjCkRQH3Fs47D2r3UvTdAyrI17TLLRLQXNBMc8QDxTvaPcyNB1KA6W9baH1hQ9tFpSJn7fzCg9aKSgTGyBcYSfbeosBVt5Jt/5AWBD3Gay3Y0OEoAxEB8OiuyisTBAm7pa43vFx129l4UMzd5k6aKbRaDQtobM7PmiDq9Fo1gwieoer0Wg0LaKzd7hKpHk93JVSp4FDTbuARqNZS2wRkeGVTKCU+jdgqI5TJ0Tk5Su51vnQVIOr0Wg0mnPoPFyNRqNpEdrgajQaTYvQBlej0WhahDa4Go1G0yK0wdU0HaXUd5RSty38/38qpf6q3WvSaNqBzsPVtILfBz6olBoBrgdub/N6NJq2oNPCNC1BKfU9IAvcKiKzSqntwO8CvSLyi+1dnUbTGrRLQdN0lFJXA6OAIyKzACIyJiL/pb0r02haiza4mqailBoFPgu8EphTSrW8ukej6RS0wdU0DaVUBvgK8Nsi8hTwIUJ/rkZzUaJ9uJq2oJQaBD4M3AZ8UkT+V5uXpNE0HW1wNRqNpkVol4JGo9G0CG1wNRqNpkVog6vRaDQtQhtcjUajaRHa4Go0Gk2L0AZXo9FoWoQ2uBqNRtMitMHVaDSaFqENrkaj0bSI/w92CC3iWkPCHwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_boundary(\n",
    "    LogisticRegression(solver=\"lbfgs\"), X, y, \"Logistic Regression, XOR problem\"\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然而，如果将输入变为多项式特征（这里 $d$ = 2），那么这一任务就可以得到较好的解决。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "logit_pipe = Pipeline(\n",
    "    [\n",
    "        (\"poly\", PolynomialFeatures(degree=2)),\n",
    "        (\"logit\", LogisticRegression(solver=\"lbfgs\")),\n",
    "    ]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_boundary(logit_pipe, X, y, \"Logistic Regression + quadratic features. XOR problem\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过将多项式特征作为输入，逻辑回归在 6 维特征空间（$1，x_1，x_2，x_1^2，x_1x_2，x_2^2$）中生成了一个超平面。当这个超平面投影到原特征空间（$x_1, x_2$）时，分界是非线性的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在实际应用中，多项式特征确实有用，不过显式的创建它们会大大提升计算复杂度。使用核（kernel）函数的 SVM 方法相较逻辑回归要快很多，在 SVM 中，只计算高维空间中目标之间的距离（由核函数定义），而不用生成大量特征组合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### 验证和学习曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.linear_model import (LogisticRegression, LogisticRegressionCV,\n",
    "                                  SGDClassifier)\n",
    "from sklearn.model_selection import learning_curve, validation_curve\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures, StandardScaler"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上文对模型验证、交叉验证、正则化做了简单介绍，现在考虑一个更大的问题：如果模型的质量不佳，该怎么办？针对这个问题，有很多猜想："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 应该让模型更复杂还是更简单？\n",
    "- 应该加入更多特征吗？\n",
    "- 是否只是需要更多数据用于训练？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这些猜想的答案并不明显，比如有时候一个更复杂的模型会导致表现退化，有时候增加新的特征带来的变化并不直观。事实上，做出正确决定，选择正确方法，从而改进模型的能力是衡量一个人对机器学习知识掌握程度的重要指标。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "让我们回头看看电信运营商的客户离网数据集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"../../data/telecom_churn.csv\").drop(\"State\", axis=1)\n",
    "data[\"International plan\"] = data[\"International plan\"].map({\"Yes\": 1, \"No\": 0})\n",
    "data[\"Voice mail plan\"] = data[\"Voice mail plan\"].map({\"Yes\": 1, \"No\": 0})\n",
    "\n",
    "y = data[\"Churn\"].astype(\"int\").values\n",
    "X = data.drop(\"Churn\", axis=1).values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用随机梯度下降训练逻辑回归（在之后的实验中将会专门讨论梯度下降）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "alphas = np.logspace(-2, 0, 20)\n",
    "sgd_logit = SGDClassifier(loss=\"log\", n_jobs=-1, random_state=17, max_iter=5)\n",
    "logit_pipe = Pipeline(\n",
    "    [\n",
    "        (\"scaler\", StandardScaler()),\n",
    "        (\"poly\", PolynomialFeatures(degree=2)),\n",
    "        (\"sgd_logit\", sgd_logit),\n",
    "    ]\n",
    ")\n",
    "val_train, val_test = validation_curve(\n",
    "    logit_pipe, X, y, \"sgd_logit__alpha\", alphas, cv=5, scoring=\"roc_auc\"\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制 ROC-AUC 曲线，查看不同正则化参数下模型在训练集和测试集上的表现有何不同。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXl8XHW9///8nGVmMpnJ2jRpkjbpRrd0TxdaCoUCt4igRVlUlKoI4vb1+pXvxfu9D/Vy8adfr9eLC4KAoAKyKoJXsCxSSkuLXWgLbaF72qZN9zbb7Ofz++MzW9NsTTJJmnyej8d5JHPmnDmf02bmNe9dSCnRaDQajaY9jL5egEaj0Wj6P1osNBqNRtMhWiw0Go1G0yFaLDQajUbTIVosNBqNRtMhWiw0Go1G0yFaLDQajUbTIVosNBqNRtMhWiw0Go1G0yFWXy+gpxgyZIisrKw8p3OamprIzs7OzIL6KYPxnmFw3vdgvGcYnPfdnXtev379MSllUUfHDRixqKysZN26ded0zvLly1m4cGFmFtRPGYz3DIPzvgfjPcPgvO/u3LMQoqYzx2k3lEaj0Wg6RIuFRqPRaDpEi4VGo9FoOiSjMQshxGLgZ4AJPCyl/FGL5yuAR4Ai4ARws5TygBBiGnA/kAPEgB9IKZ/O5Fo1Gg1EIhEOHDhAMBjs66V0mdzcXLZt29bXy+hVOnPPHo+H8vJybNvu0jUyJhZCCBO4D7gCOACsFUK8KKXcmnbYT4DfSyl/J4S4DPgh8FmgGficlHKHEKIUWC+EWCalPJWp9Wo0Gjhw4AB+v5/KykqEEH29nC7R0NCA3+/v62X0Kh3ds5SS48ePc+DAAUaOHNmla2TSDTUb2Cml3C2lDANPAR9rccxE4O/x399IPC+l3C6l3BH//SBwBGV9aDSaDBIMBiksLDxvhULTOkIICgsLu2UxZtINVQbsT3t8AJjT4phNwHUoV9USwC+EKJRSHk8cIISYDbiAXS0vIIS4DbgNoLi4mOXLl5/TAhsbG8/5nPOdwXjPMDjvuyv3nJubS2NjY2YW1EvEYjEaGhr6ehm9SmfvORgMdvl90Nd1Ft8GfimEWAqsAGpRMQoAhBDDgMeAW6SUTsuTpZQPAg8CVFdXy3PNM9b52IOHwXjfXbnnbdu2nfcuHO2GahuPx8P06dO7dI1MuqFqgeFpj8vj+5JIKQ9KKa+TUk4H/m983ykAIUQO8Ffg/0op12RwnW0ScySH64PsPtqY3PafaOZIQ5D6YIRo7Cz90mg03eDUqVP86le/6tK5H/nIRzh1qv2w5ne/+11ee+21Lr3+YCeTlsVaYKwQYiRKJG4CPp1+gBBiCHAibjV8B5UZhRDCBTyPCn4/l8E1tklDMML+EwFijmzxTNLwQQjwuS0KfC78bkv7eTWabpIQi6985StnPReNRrGstj+yXnrpJYB23TF333139xeZATq6t/5AxiwLKWUU+BqwDNgGPCOl3CKEuFsIcW38sIXAh0KI7UAx8IP4/huAi4GlQoiN8W1aptbayto5eCrYilC0PA4aglFqjjXzQV0Dh+uDhKPa2tBouspdd93Frl27mDZtGnfeeSfLly9nwYIFXHvttUycOBGAj3/848ycOZNJkybx4IMPJs+trKzk2LFj1NTUMGHCBL70pS8xadIkrrzySgKBAABLly7lueeeSx7/ve99jxkzZjB58mQ++OADAI4ePcoVV1zBpEmTuPXWW6moqODYsWNnrDMWi7F06VKqqqqYPHky//3f/w3Azp07ufzyy5k6dSozZsxg165dSCm58847k8c+/bSqAmjt3h5//HFmz57NtGnTuP3224nFYm1eq7fJqJRJKV8CXmqx77tpvz8HnGU5SCkfBx7P5Nra41hj+Jw/9KMxyZH6EEcbQuRm2RT6XHhd/fubgkbTHv/+ly1sPVjfo685sTSH710zqc3nf/SjH/H++++zceNGQH2gbtiwgffffz+Z8vnII49QUFBAIBBg1qxZfOITn6CwsPCM19mxYwdPPvkkDz30EDfccAN//OMfufnmm8+63pAhQ9iwYQO/+tWv+MlPfsLDDz/Mv//7v3PZZZfxne98h7/97W/85je/Oeu8jRs3Ultby/vvvw+QdH995jOf4a677mLJkiUEg0Ecx+FPf/oTGzduZNOmTRw7doxZs2Zx8cUXA5xxb9u2bePpp59m1apV2LbNV77yFZ544gkmTZrU6rV6G13B3YKYIznS0PX0MinhVHOEXUea2HW0kdPNEaRs30LRaDRtM3v27DNqA37+858zdepU5s6dy/79+9mxY8dZ54wcOZJp05QzYubMmezdu7fV177uuuvOOmblypXcdNNNACxevJj8/Pyzzhs1ahS7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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_with_err(x, data, **kwargs):\n",
    "    mu, std = data.mean(1), data.std(1)\n",
    "    lines = plt.plot(x, mu, \"-\", **kwargs)\n",
    "    plt.fill_between(\n",
    "        x,\n",
    "        mu - std,\n",
    "        mu + std,\n",
    "        edgecolor=\"none\",\n",
    "        facecolor=lines[0].get_color(),\n",
    "        alpha=0.2,\n",
    "    )\n",
    "\n",
    "\n",
    "plot_with_err(alphas, val_train, label=\"training scores\")\n",
    "plot_with_err(alphas, val_test, label=\"validation scores\")\n",
    "plt.xlabel(r\"$\\alpha$\")\n",
    "plt.ylabel(\"ROC AUC\")\n",
    "plt.legend()\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图的趋势表明："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 简单模型的训练误差和验证误差很接近，且都比较大。这暗示模型欠拟合，参数数量不够多。\n",
    "- 高度复杂模型的训练误差和验证误差相差很大，这暗示模型过拟合。当参数数量过多或者正则化不够严格时，算法可能被数据中的噪声「转移注意力」，没能把握数据的整体趋势。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述结论可以推广到其他问题中。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据对于模型的影响"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一般而言，模型所用的数据越多越好。但新数据是否在任何情况下都有帮助呢？例如，为了评估特征 N ，而对数据集的数据进行加倍，这样做是否合理？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于新数据可能难以取得，合理的做法是改变训练集的大小，然后看模型的质量与训练数据的数量之间的依赖关系，这就是「学习曲线」的概念。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个想法很简单：将误差看作训练中所使用的样本数量的函数。模型的参数事先固定。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_learning_curve(degree=2, alpha=0.01):\n",
    "    train_sizes = np.linspace(0.05, 1, 20)\n",
    "    logit_pipe = Pipeline(\n",
    "        [\n",
    "            (\"scaler\", StandardScaler()),\n",
    "            (\"poly\", PolynomialFeatures(degree=degree)),\n",
    "            (\n",
    "                \"sgd_logit\",\n",
    "                SGDClassifier(n_jobs=-1, random_state=17, alpha=alpha, max_iter=5),\n",
    "            ),\n",
    "        ]\n",
    "    )\n",
    "    N_train, val_train, val_test = learning_curve(\n",
    "        logit_pipe, X, y, train_sizes=train_sizes, cv=5, scoring=\"roc_auc\"\n",
    "    )\n",
    "    plot_with_err(N_train, val_train, label=\"training scores\")\n",
    "    plot_with_err(N_train, val_test, label=\"validation scores\")\n",
    "    plt.xlabel(\"Training Set Size\")\n",
    "    plt.ylabel(\"AUC\")\n",
    "    plt.legend()\n",
    "    plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "把正则化系数设定为较大的数（alpha=10），查看线性模型的表现情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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3HzzzXz+83ZWmyeffJIXX3wRn8/HM888Q25uLnV1dZx22mlccsklXdYc/uUvf0kgEGDPnj3s2LGDRYsWJX773ve+R2FhIaZpsmrVKnbs2MGXvvQlfvKTn/Dqq69SXFzcYV9btmzhkUceYdOmTUgpWbZsGWeffTYFBQW9StG9bt06XnzxRcaMGZNQRz3wwAMcPnyYbdu24XK5aGhoIBaLsXbtWl5++WWmT5/OJz/5SX75y19y8803A3YKkLa8R6tWreL+++9n2rRpbNq0iZtuuolXXnkl7bEGkxEzUxhXGACgpiUGOJHNDg7DxcKFCzl+/DjV1dVs376dgoICxo0bh5SSb37zm8yfP5/Vq1dTVVXFsWPHutzPxo0bE53z/PnzmT9/fuK3J598kkWLFrFw4UJ27drF7t27u23T66+/zpo1a8jKyiI7O5uPfexjvPbaawBMmjSJU06xs8kuXryYgwcPpmy/fPly1q5dy4MPPphQ/bz00ktce+21uFz22LuwsJD33nuPSZMmMX36dAA+9alPsXHjxsR+rrrqKsBOqf7mm29yxRVXJIrxHD16tMtjDSYjZqYwrsAWCsdaYkwvzXHcUh0coNsRfSa54ooreOqpp6ipqUl0hI899hi1tbVs2bIFt9vNxIkTicVifd73Bx98wN13383bb79NQUEBa9eu7dd+2kiusaCqalr10f3338+mTZt4/vnnWbx4MVu2bOnXsbKysgCwLIv8/Py0+ZjSHatzAaKBMIJmCn4AjrXY+jvTkuimIxgcHIaDq666iscff5ynnnqKK664ArBTZpeUlOB2u3n11Vc5dOhQt/s466yz+O1vfwvAzp072bFjBwAtLS1kZWWRl5fHsWPH+POf/5zYpqu03StWrODZZ58lEokQDod55plnWLFiRa/PZ//+/Sxbtox169YxatQojhw5wnnnnccjjzySqM3c0NDAjBkzOHjwIBUVFYCdcfXss89O2V9ubi6TJk1i/fr1AEgp2b59e5fHGkxGzEwhx+cm1+/iWEv7iCGmm7jVESMXHRxOGObMmUMwGGTMmDGMHj0asMtcXnzxxcybN48lS5Ywc+bMbvdx4403cu211zJr1ixmzZqVqGa2YMECFi5cyMyZMxk3bhzLly9PbPPZz36WCy64gPLycl599dXE8kWLFrF27dpEDYTrrruOhQsXplUVpeOW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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curve(degree=2, alpha=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图表明：对于少量数据而言，训练集和交叉验证集之间的误差差别（方差）相当大，这暗示了过拟合。同样的模型，使用大量数据，误差「收敛」，暗示了欠拟合。加入更多数据，该训练集的误差不会增加，且该验证集上的误差也不会下降。所以，倘若误差「收敛」，如果不改变模型的复杂度，而是仅仅把数据集大小增大 10 倍，或许对最终的表现结果没有太大帮助。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果将正则化系数 alpha 降低到 0.05，会怎么样？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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eIJFixaxcOFCPvzwQ7Zv395vm9544w0uv/xyHA4HTqeTK664gtdffx0YXCn05cuXs2bNGh544IGYCamyspLrr78+NjteTk4Ou3btory8nBkzZgBw7bXX8tprr8XOc9VVVwHgdrt56623uPLKK2OTJNXW1vZ5rUShRxajjNLcdL59wUy+/eRmfr2uiv+9Yh6ZaZaBD9RoEk0/I4BkcuWVV/LUU09x9OjRWAf56KOP0tDQwMaNG7FYLJSVlfVamnwg9u/fz5133sl7771HdnY2a9asGdZ5ogymFPq9997LO++8wz/+8Q8WL17Mxo0bh3WtaDnzcDhMVlZWr/WqertW97k+hoseWYwyhBCsrijiYwsm8I+ttazdUkswFE51szSaEeOqq67i8ccf56mnnuLKK68EVGnygoICLBYLr7zyCgcOHOj3HGeddRaPPfYYANu2bWPLli0AtLa24nA4yMzMpK6ujn/+85+xY/oqj75ixQqeffZZOjo6aG9v55lnnmHFihWDvp+9e/eybNkybr/9dvLz8zl06BCrVq3ivvvui82h0dzczMyZM6murqaqqgpQFWzPPvvsHufLyMigvLycJ598ElDFTDdv3tzntRKFFotRiMNm5sbzplOcaeeX63azR5ujNCcRc+fOpa2tjYkTJ1JcXAyo6Uo3bNjAvHnz+OMf/8isWbP6PceXv/xl3G43s2fP5tZbb2Xx4sUALFiwgIULFzJr1iw+9alPsXz58tgx1113HatXr445uKMsWrSINWvWsHTpUpYtW8YXv/hFFi5cOOj7uemmm5g3bx4VFRWcccYZLFiwgGuvvZbJkyczf/58FixYwGOPPYbdbufhhx/myiuvZN68eZhMJr70pS/1es5HH32UBx98kAULFjB37tyYw7+3ayUKXaJ8lBIOS57+oIabntzCR+YV88PLKsh2WGPbdcnu8Y0uUT6+GYslyvXIYpRiMgkunNtpjvrntlr8QW2O0mg0qUGLxSjGZbfwtXOmKXPUS3vYU6fNURqNJjUkVSyEEKuFELuEEFVCiFt62V4qhFgnhNgihKgUQpTEbQsJITZFlueS2c7RTHmeg2+eP4OGNh93V+6l0e1LdZM045zxYprWdOVE/69JEwshhAHcBVwEzAGuEULM6bbbncAfpZTzgduB+MllPVLKUyLLJclq52jHbJi4YE6nOerfHx7FG9DFBjXJwW6309TUpAVjnCGlpKmpCbvdPuxzJDPPYilQJaXcByCEeBy4FIjPgJkDfDPy/hXg2SS2Z8ySmW7hK6umsqG6mV++tId5E0dfvRrN+KCkpISamhoaGhpG9Lper/eEOrKxRiru1263U1JSMvCOfZBMsZgIxAf51gDLuu2zGbgC+BVwOeASQuRKKZsAuxBiAxAE7pBS9hASIcR1wHUAhYWFVFZWJvwmRgsS+NS0MD/b6Oenz6znyrLAuL7f7rjdbn2/4xi32x2rHnsykKr7HSg/pT9SncH9beC3Qog1wGvAYSBqYymVUh4WQkwBXhZCbJVS7o0/WEp5P3A/qNDZ8R5auaDdz57gh/xt8xEWFdi4/sIVpFlPjqlYdejs+Ebf7+gnmQ7uw8CkuM8lkXUxpJRHpJRXSCkXAv8dWXc88no48roPqAQGnwUzTslxWLn+7ClMyLTzyI4gu+va9NwXGo1mREimWLwHTBdClAshrMDVQJeoJiFEnhAi2obvAA9F1mcLIWzRfYDldPV1nLRMLXBy43kzaPZK7nttH3Vtw69ro9FoNIMlaWIhpQwCXwVeAHYAT0gpPxRC3C6EiEY3rQR2CSF2A4XAjyLrZwMbhBCbUY7vO6SUWiwAm9lg1awCzplksHZrLet21Ou5LzQaTdJJqs9CSrkWWNtt3a1x758CekxtJaV8C5iXzLaNZfJdNi6bZmFHq4Vfr9vD7KIMcpxWzCaBxTBhNgRmk8BsmNRr5L1Go9EMl1Q7uDXDxGk1uPG8qdz81y08+OZ+vnz21H73F4JOETFFBUW9Wkwm0m0GFi0oGo2mD7RYjFGEgJUz87lkwQT+tvkI2ekWVs0soDCj99htKSEQlASQQO81ptKsJlx2C06bGYdNfzU0Gk0nukcYw+S7bHxxRTkHmjt49J2DPPrOQWYWujhzeh5nTssjz2kb+CRxePxhPH4f9fgwTAKX3YzTZsZlN2szlkZzkqPFYgwjhGBqgZMfXlZBbYuXN/Y08npVAw++sZ8H39jP7OIMVkxTwhFf3nwwhMKS4x0BjncEAEizGrjsSjjSrfpro9GcbOhf/Rgn3Wom12lFSvjE4hI+sbiEI8c9vL6ngTeqGrn/9X088Po+KiZmsmJ6HmdMzRvWNK0efwiPP0R9a+eoIzry0KMOjWb8o8ViHFCcmYbdbFDb4iUUlkzISuOqUydz1amTOdjcwRt7Gni9qpG7K/dy76t7mV+SxYrpeZw+JReXfejC0X3UkW4zyEm3kpVuQQiR6NvTaDSjAC0W44Rsh5WMNAv1bV6a3H6iRUMn56TzqWWlXLN0MtVNHbERx29eruLuyr2cMimLFdPyKM11kJlmITPNgtU8tJFChy9Eh89DbYuXXKeVHId1RCKrAqEwx9r9HPcEyHPayBmiqU2j0QweLRbjCMMkKM5MIzvdSm2LF7e3M1lPCEF5noPyPAf/cVopexvaY8Lxy3V7upwnzWKQkWYmM81Cht0SE5HMNAsZ3d/bLdgtJoQQhMKS+lYfDW0+MtMs5DqtCfdvSClp9QY51u7H7QvGRPHwMQ+eQIgJmXY9utFokoAWi3GI3WJQnuegxRPgaIu3x3SsQgimFTiZVuBkzRll7Gtsp77VS4snSIs3QKtHLS2eAM0dfqqb2mnxBAiEeq9DZTObuKiiiP84rQyr2YSUxMxUaVaDPKeVzLQTM1FJCbUtHo61Bwj1UQ+r2e3HGwhRmpOu/SgaTYLRYjGOyUyz4LKZaXT7qG/z0dt8NkIIpuY7mZrff7lkKSWeQIhWT5CWiJC0egK0egPsb2zn2U1HeP/gcb51/gymxJ3L4w9xqNlDreEl16FMVIPtyMNhGRMsbzBEY5t/wGM6fCGqGtyU5jhOmoq8Gs1IoMVinGMyCQoy7GSlWzna4qXFExjWeYQQpFtV2GxRZs/Ev5UzC/jVut1868nNfHpZKZcvnIhh6hxJBEOSulYlWplpFvKctj478w5/kOZ2Py2eAOHe8wf7JRCU7G1wU5KdRla69mNoNIlAj9VPEqxmE5Nz0ynPd2C3JP7fvrg0m99es4hl5Tn8YX01//XMVo629KyIGzVRVdW72dvgpqUjgJSSYChMQ5uPPXVt7K1v51j78IQi/jqHmj3UtniGfxKNRhNDjyxOMpw2M9MKnDS1+6lr9Q65QxYCLIYJq9mExRBYDROGSVDX6iMjzcLNq2dRubuBe1/dy9cf/4Avrijn/NmFvforOnwhDvo6MBvKOZ6MaZ8b2/x4A2Em56R3GeloNJqhocXiJEQIQZ7TRlaahbo2H81uf9w2IkLQVRCi6/oKiXXYzOxvbCcYglUzC5g7IYNfvbSH37xcxbv7m/nqqml9moSCfTjOE4XbG6Sq3k1pbjp2i/ZjaDTDQYvFSYzZMDExK41ch5WwlFgN07CjiKIRWEowJAUuOz+4rILnNh/hj+ur+dqfP+Cr50xjWXluQtruC4bYeOAYb1Y1sfFAMxOz0/jo/AmcOS2vV0HzB8MRP0b6sDLYh4OUarQko+8h8rlzFBX9HEUgYuu9gVCPc8YP0KL7RteZhFojBDp8WJNwtFhoEva0bbcYTMl3UN3YgT8YxiQEl50ykYWTsvjZi7v54T92cMGcQr5wZvmw8i+8gRAbDhzjzapGNhxoxhsI47KbWVqew+46Nz9/cTcPvbGfCyuKuGhuEbndCimGw3CwqYPCDBsFfVTnHSy+YIgOX4h2f5AOf4hgSPYQgRPBGwyxp8497OOjWiGEEhWTSb0KAcoaF32vBMZsCKxmEzazgc1swmqYMGmznSYOLRaahGIzK8HY39iOL6AcIqW5Dn525QIee+cgf32/hs01x/nm+TOZU5wx4Pk6/EE2VB/jpS1+Pnz1HfzBMJlpFlbOKODMaXlUTMzEMAnCUrLp4HGe33qEJ947xFMbazhjai4XzytmTnFGlyftulYfnkCISdnpg+4QvYEQ7T4lDO3+IIHg6J77vKtoSUJh9ToUogJiNUzYIkJiNSuTpPb/nHxosdAkHIthYkrEJOWNCIbFMHHtGWUsKcvmFy/t5jtPb+Hji0q4ZunkHmajDn+Qd/c38+beRt4/cBx/KEyGFc6bXcyZU3OZMyGzR2dlEoJFpdksKs2mtsXD2q21vLi9jtf3NDIlz8FH5xdz1ox8bGY1imr1BNkbdDM5Nz22LoqUEm8gjNsXpMMfpN0X6jMRcDwTDEmCoRAd9DSHGaboSESJh91i4LAaI5YM6Q+q/0+7L0ibN4gQamSbFllsFpP2TyUYLRaapGA2TJTnOahu6sDj7+xs5k7I5NdXL+R3b+znyY01bDxwjG+eP4Ncp4139zfxZlUT7x88RjAsyXFYuXBuIcun5eE6vpvJc/qfDTBKcWYaXzhzCp9eVsoru+p5fkstv365ioffquaCOUV8ZF4RBS473kCYqno3k3LSMYSgPSIMHf7gCYXtngyEwjJWiTgem8VEutXAYTWTbjN6CPFwCYclbn8QtzeI2xeMjVrjcYeC3UrcRATEqgTEbjFhNxvjxrzmD4bxBUP4gmFyHdak+6m0WGiSRqdgtNPh6+xU0q1mvn7OdJaW5fDbV6q48S+bAAiGJXlOGxfPK2b5tDxmFrkwRX4ANS1D/yHYLQYXVRSzem4RWw+38PyWWp75oIZnPqhhWXkuH51fzLyJmRxo7BjW/YXCEm8gRIc/hMVQSYtDLcI43vAFwvgCYY61q+RPsyFiwuGwmoeUVd8REYc2XxCPPzRkP5CU9BA0IVR5GrvFiAmJ3Tz8wI5kEw5LfHGi4At0vo//e+SkW0l2TIMWC01SMUyC8lwHB5o7ujz1AZw2JZdZRS4ee/cgNrPBmdPymFHoTPgTkhCC+SVZzC/Jor7Vy9ptR/n3h0dZv6+J0px0Lp5fTGGGHY9fjSraIx1Muy9IR0QMOiL+ig5/9DWEp5doJbNJqCdrm+oYHVYz6VYjsphjrw6betp12NS6HIeVfKct6Z1Wuy9IdVM71U0dHGhqp7qxnYPNHYQlkfaq9sW/79J+W891DqtBVrq1Vz9GMCRj5WEATCZix6TbzKRbOp/0o6al6OhhMKY/fzDMnvo2rIaJsjzHgNWOVZRZOGIe7axmoMxqAqthYDGrcHFLxF8zEs7+6ChBvYZjAjGafGNaLDRJx2QSlOWmc6Cpg7ZugpGVbuWGldNGrC0FGXbWnFHGNUsn8fruRv6+9Qh3V+7tdd+0yJNn1KwSLYrYvbNMsxoEQ+GI87tTUNp9QTyBEHWt3pjAdPiD9NUHmgTkOm0Uumy4ZIDytoMUZtgpzLBRlGEn22GNjbQGIhgKc/i4h+qmDqob26luaudAcwcNbb7YPg6bQVmug7Nm5GM1TEoYfZ1i2OT29SuM3f9WM4tczJ2QwZziDGYUunr1GYTDKu9FPTj4YqYiXzDMrqNtA96XPxhm19FWth5uYevhFnbVtcUKXJpNqrLy9EIX0wucTC9wUpI9uGRMZVaTePqYnz7qo7HG5R/Fi4kQ6hwhKdVrWBIOQzAcJiQ734fDEJIydr+hsCQsk5OQmmiSKhZCiNXArwAD+J2U8o5u20uBh4B8oBn4jJSyJrLtWuC7kV1/KKX8QzLbqkkuQghKc9M51OwZdn2qRGIzG5w3p5BzZxewr7EdbyDUOQqwmUmzGEmJ+JGRjiIaVeXxh3D7gjS7/Rxt81LX6qWu1cf2phDraw92OdZiCApc9i4CUphhp8Blo9UbHTGo0ULNMQ/BiCoZJkFJVhpzijMorUinPNdBaa6DPOfg7dxRk1u0zd3bf6Cpg+21rTz2zkFk5JpT8x3MKVbiMbs4o9ekzKipKNxHb9mXOJgETMlzcvG8CVRMzCAQkuypa2NPvZtXdtazdmstoERsan6cgBS6KHTZhjx6jfloenH2D4ewlD2qQQ+WFk9AiX/cCLEs18H9n12SkLb1RdLEQghhAHcB5wM1wHtCiOeklNvjdrsT+KOU8g9CiHOAHwP/IYTIAW4DlqDi/TZGjj2WrPZqko8Qgkk5aYhjxGbZO7HzKdOJ02bGJARSqie7sFS2XinVj7JziXwOE3uai1bdHSmEEDF7eX+TNdXs2ED+9IXUt/liAqJe1bK7rg23L9jjuDynldJcB4t1hg+5AAAgAElEQVRLcyjLTacs18HE7LQTnozKMAkcNjMOW/9dhtsXZOfRVrYfaWV7bSv/2FrLs5uOADAxK405kZHHnOIMinuZe2Qw4jBvYiZzJmTgtJkRIT8mfysIgxXlE5GGSjA9fMzDnvo29tS52V3fxt83H4mJZ4bdzLQCF9MLncwocDK9wDXkOepHAl9QVWyOPgAcaO6guqm9y28nw26mPMfG7CJX0tuTzJHFUqBKSrkPQAjxOHApEC8Wc4BvRt6/AjwbeX8h8KKUsjly7IvAauDPSWyvZgRQgpGOyeTpUmZksNgsJhw2Nfe302Y+4af/cMR0EAxJ/KEw/mAYfyhMIPLq7+ZIHElsZoNJ2elMyk7vdXu7L6jEo82Hy2amLNeB055ay7LTZmZJaQ5LSnMANZthVb2b7bVKQNbvbeLF7XUAZKVbYsJRezjAgR1bBhQHABHyYfiOYRxvQQS7BidIw0bY4qLU6WRSdj7nzCqMteNAU0dMQPbUt/HkhmMxk2A0DDialBgNCe58NfrZx8BiCMyGCbNJYDYEZpMp8tr7++NeicsTwGwSGCZBc7s/NlJQo4YOals8ne0zTEzOSWfx5GzKch2U5qYxxREgn2OYpJ+p85Jvyk3mN2sicCjucw2wrNs+m4ErUKaqywGXECK3j2MnJq+pmpFmYlYaJsGAc1QYJoHTZqbeMDGzyJXwaCOTSWBCYDEgjd4jdQKhMIGokMSJSCAkCYRSJyYOm5kp+c4u84cki/iMcJPomv0tBPiDsleHtMUwMTtihvr4IjWiO9SsTFZRAXlrbxMCmJof7lUcAETQi9HRjOFrQYS6VhKOPi5IIkIS8mF4GwFB2JxO2OpEWFxMy3cwrcDJRRVqf28gxN4GN3vq3TS3+/EFw/gjkUYxR3MgRFskVNcfUp/Va3iIKY698OY7Pf/OQFGmnbJcByum50WEIZ3izDT1YBQOYfY2YvYcBdlzZJlMUu3g/jbwWyHEGuA14DAM3igohLgOuA6gsLCQysrKJDRxdOJ2u8fF/QbDqsONIlCdkMkkMCKdUj3g6WjnrTdeS1k7+yNW8yli2gpHyn50r/s0FALeDmp2bEhsQ3vBQGKYepmrQHR2wr3T/b4EEqFMfdHXPlTUAOYZMK8EKBEc99kQAQ+ZziDQBN4mju+DFilBhhDhENDzOyKEwBRXB0uZFmW3ax/vdlMmpDAir4JMYIkN6FoZpvMIKdW9SgkyjIi8l1ISlOAPgT8MwTCEpCAoTQRRSygMQamy50Myuo/6zvv9fjCsBCWEwuC0wkSHiWKnwGYAtKsl0ABHobZWImQw8rfo+Xc9fPz1fv5XiSGZYnEYmBT3uSSyLoaU8ghqZIEQwgl8XEp5XAhxGFjZ7djK7heQUt4P3A+wZMkSuXLlyu67jFsqKysZL/fb6PYRCIVx2sw4rOZewxTH6v2GwrLLaMQfN0Lpb1RSs2MDJbMT4LCUYUTIjwj5MIV8iJAfqwiSaQmSYRVYjCSFhJrMBIQFT9hCR9igI2TCE7YQNlnB1LXbKaHzfkXQg+FrwfC3IEI+BF3zIuwWY9Bt9gXDkTDZIN7I3zweabIRtjoJWZwgTMr/EfkbibB6HWqJlBjCTMiaQciWRdjioHsSxGD/vyLoxexpwPAd79IW9XeJZKqbDTLKF6u45CSSTLF4D5guhChHicTVwKfidxBC5AHNUsow8B1UZBTAC8D/CiGyI58viGzXjEPynH081o0DDJNQGcR9mLiiAhItK9LuCw7drCWl6ljDfkxB9SpinZ4y8wnAaTeTmWaJJMYlOQktHMRCEAseMgRgVk/Q3mAQr1/QETLoCBuETTakYUWEA9iad2FIH2kWM3a7CbslLZJxPbwmRP0KmWmqmwuGJd5gCK8/jDcQwhvwIbw+DG/TkM5rEp2jX1OkIKOUEJRhQqHIWFIGMXzNGL5mJRy2TELWTMLWwZkMRaADi6cek79VCYNFJQ9GBSIarjuSJE0spJRBIcRXUR2/ATwkpfxQCHE7sEFK+Rxq9PBjIYREmaG+Ejm2WQjxA5TgANwedXZrNOOJaGE+p80Mrs65zut2m3Dazf2Khwj5MbzNmL3HQPYeXWa3GGTY1VzsSX7wHBDDBA6rGYcVcgEpQ3iDbXgDYWoJU5plYDMnz/9iNgmcVjPOSOCTlGr04Qmo0N2oD8YwCYQJTIhO/4xJYESq9/aHEg0182MwJAmGpcq1CLcQ8Bwn6DHwmzMQso98jkAbzmATaWEPdruB1ZmObZRUBUiqz0JKuRZY223drXHvnwKe6uPYh+gcaWg0JwXRuc6jCWZR8VBF89TIQ/jaMHuaMAXa6M1MYjYJXHYLLrt51HQ0vSEEscJ/hkmMeFtVQqApodMMCwEWIbCYDOhz2hQvR0SA6RzAb8kgYMnALAPY/U3YTL6I/2T0jbZT7eDWaDT9EBWPdAMQrchQA96gB48thEcYePxBFQWEio5ypZlxWMwjbqLQDA2BwG4KYQ8dg9DYSB/TYqHRnAj+DvCppDAsaWoxJbA0tr8d2hvAoxycgs6ncdIjtY6CISyRGH+NJllosdBohkI4rMTB1wreVgj34iswbBHhSO98NYbwUwuHIRyE+p0Q9PS7a9SUc1IT6FBibR59ppvxhBYLTeo5dgACHrBnqsXae8Zyygj6I+LQAn439OGcjBHyqcUbF+NvsvQUEHO3EhMBb2QUcQxCgQGF4qSnowk2Pw7bn1OqWXIqlJ4Bk0+HtKxUt27cocVCk1raG8ETCXRze8B9FAxrnHA4e8Sojwj+djVy8LWqJ9cTJRwAX0CdL4rJDOaI6SrQoYRIMzAdTbDpMdjxdzUCm3ae+hseeBOqXwcEFM6FsjOVeGRNTuz1wyE4Vg112+DoVrVY0mDSMph8GhTN65FLknQCHWBLbia/FgsNhIJDM5MkCn87tNT00h6/esJub1A/OlsGyJAyzyQr/nMw5qWEXzMI/ja1aAamvQE2/Rl2/l112NMvgIWfgcwStX35jdC0B6rfhANvwTv3qiVzkhKN0uVKRIbqUwr6oGFnpzDUbVPfXYD0XCisUP/DbX+FLX8Bq0ONciafpgQkLbv/8w+VcBCa93e25eg2yJ8Fa/6e2Ot0Q4vFyYy/A9x1yrySNRnSc0bu2qHIF36gDNlwUI08gn6o2wo2F9izlIAMVeBCASVEIb+6fsivRCEUUE9mA5mXNKnBXa9GEjv/of5HMy6EhZ+GjG7l4oSAvBlqWfI59d0+sF6NOKIduS0DSk9XwlGyRJkDu+M53nXU0LhbfQ8BsstgyjlQVKFGEK7izpGvvwMOb4CDb6tlXyUgVEc++TS15E0HMcQHHn871G9XolC3Fep3KLMtgCMPCufBnEuHds5hoMXiZMTbAu6Grk+0xw+qp3h7RvKvL6Uaxg/16V2GVdu9LYBQJip7ZqTNomvnHxOGQOe6Ey/9Nn4Ih9TT8qF34fBG5R8x25WT2JwWebX389ptnbMA0vMSazJ010VEYq3638+8CE75NGQUD+54ZyHMvUwt/naoea9z1LH7BeVHmrhIjToMa6c4tERqmJoskD8T5l2phKFwrvq+9YU1HcrPUosMQ+MeOPQOHFwPG38PGx+GtByYfBp5zAT/eWoUEo+U0HZUiVV01NC8D5BKZHKmwPQLVXuKKtQ9AhQtGOpfd8hosThZkFI5Tt31fThOJRzbD7nTen6BE03rkQSYXmSnCad14L01KP9QzXsRgdgAvjbVAeXPBGcRBL3K5OJtVa/Rz0GvEt6BsGeq70/uNMidql6zJg/dft92FD54FHb/U32OioSraOj3HMXqgCkr1RIOqk74wFtw4A144xdqH5tLmZRmXqQ64ryZw4+wiv5d82fCos+q396hd9WIY/+rVPjXwp7fQNF8NeIQIjJy2KZ8MqBGPQVzYPG1ql0Fc1Ia/KHFYrwTDqkvX3vDwD94GVZPMbnTwWJPTns8x6C9Pjnn1nQlFFCdz6F31dIcmT42PRdKz4RJS2Hi4sGNJsMhFeHVXUSCPmUSaT0CTVVq+fDpyEgOMCyQXR4nItMgd4oaFXantRY2/Ql2/Ut1trMuhlM+1fn0nChMZphwilpO+zK0HFQ+q+zSoZuIBktatjKfzbgQwkE+ePs1Fpp2w6G34e271T6uIpiwUAlDUYX6uyUyZ+cE0WIxXgkFIk7iRuUcHizhoOpU8maoH3oiCXiVuUuTPFproSYiDkfeVx25yazMFkuvVwKRM2Xo5iKTAab03m383QkH4fihTvFoqlJ+g11xlX9cEzpHIDnlzNzzMrz1uuqsZ38sIhIFQ2vjcBACskqTf514TGZaMufA3HPgtC8pc5swgSN/ZNsxRLRYjDcCXvXk3tHMsG30IT807VXOuEQ92YRDysw13pzIUXu0YVM27eiS6AiY3pBSPRA07lHCcOjdTnu7q0hFC5UsVU+rI2m+MJkhp1wt08/vbGtHU1cBadobCXWVFAqLctKecs2o7zQTTqJHTklCi8V4wedWTyi+BBnwgx4VrZQ7NTFOy+MHlNlivNBSA+t/q2zQmSVgNcHWJ2FzZOZf1wQonBMRjwrVcZ5I7H04pK7ZtAcaq9RrU1XE2Y9y0E5YqJy5JUtVm0ZTgSghVOSOI0/Z6KMEOuBYNW8fNnHGwlmpa59mQLRYjFmkGj3421UyVzI6Yn+bilrKKT+x87TVdXZqY52ABzY9Cpv/okJ3l30JKj6uTHZBnwqzrPtQLYffh6qX1HFmuwqhjI0+5qgQ4N4I+nC1VcH2dyNP4HugaZ/yGYCK0skpV+GfedOVOSdvxtgsdxFx4vobjqa6JZoB0GIxVgh4I8LQpl4DXvW0nmy8x5X9OWvSwPv2enwrtB1JbJtSgZSw/1VYf7cy8007H5Zdr56Uo5htkZDGeZ3HuI9C3XYlHvUfqvIUUR9SZgkURIQj6FXmpKYqOH6QxVFzndWhAg5mf6xTGLJLRz5DeDQjIqbSofjmNENGf+NGI1JGyj9ERg3+9s6koFTQ0aienIcauhj0j4ygJZtj1fDWr9VIIXcqnPNdKJ4/8HFCqKQtVzFMO1etC3qhYVfn6KPmXdjzgtrmyFfCUH4W2zryqFh4qgppHU3mpNGGPUtlaAuTMsF6jqnXkfCNme2RPJ/ICDH+YS6Vv9ckocViNBAOQ6A98mVrH1yxupGmrVaZPxy5g9s/HFYO7bH8o/G3w8Y/qOxfS5oqJzH7oyf2VG+2Q/ECtUBk9FGnQpXjzFKNHx49sbyC8Y7JrEZm8YEEaVlqCYfB1xIRjrbE/pbMaeoa9kz1nYjHmg5EnPMBj/IjjiPx0GKRaqRUpodAe6pbMjAth1R01GAqerbWJKYAXyqQYdjzoqor5Dmu4v1P/WJyKpkKoUVhqERHE32VezGZlIikZavAAG+ccAwnQtCSrq6ZljV4v1B0bpN48fC3qzaM0YKRWixSTUvN2BAKAKQyK5nM/Ve4bG/qzEIdazTugTd/pZLZCmbD6h8rx7Qm9fQ2mhjwGEPVPEvPGZpwxErJZPUsJT8couIR9XHtaFSC53erEchIFK48QbRYpJKOZuUPGEtEs7zzpvcchkOkkuyhkW/XieJtgfceVGWv7Zlw9s0q2zZZGb2aoTHQaGIwxAtHKNgpHNEnfauz08SU6ITU7sSHEoOyMESJvR/CumRVY45Di0Wq8HeMzU4VVNRJtCxI/FNXKKicwcku2BcORoS2SWWodzR1lpfoTq++4W4r/e3KL+F3Q8UVsHiNqhN0MmB1KT+UyRwpuhhUS2/vU1GIcTijicFgmNV9O3Ij3x2RmjL9UeKDGEZpQIMWi1QQCo6ebObmfbDhIShboZ6kB0vIr8qC5E5XP7JoJdnBFJzrCymVeaCjUYlAe2PsfUXdYdjVFpks6RgJ77iKF8Dy/6NKYYx3hKE6X0f+0GqAhSLiEY6IRyjufcAb8VEl8P+SiNHEYEj2KGKcoMUiFRw/cGKdaiII+uCDR9RkMkiofkPVzD/9q4P/8QS9kRHGNBUtNZxKsu0NsP4uaNithKG3v4s9E7spE3KL1bUc+aoYXnQYn57bu+NRDqHjOpGRhLNImav87tEZyRbFHLGZp+UMz2xhmCMddx8C0yOqr314uQ/JGk1oToikioUQYjXwK8AAfielvKPb9snAH4CsyD63SCnXCiHKgB3Arsiub0spv5TMto4YrUcSV5JjuNRuhtfuVGaw6Req5LItT8CWx1Vk1nnfG3x9nkC7yjAeTuRT9evw6k+VQJQuj+v8419zwbCy4cOjrJw72qKGRLdJowo7c2R87lEiHkLZ4B15yTetmUzqGtHrSNkZBRTLFxrAkTtSownNkEnaf0QIYQB3AecDNcB7QojnpJTb43b7LvCElPIeIcQcYC1QFtm2V0p5SrLalxI8x1VMfarwu+Gd+5QT11UEH/mpmv4RVPXLgllQeQc8fZ0SjOJBTqgyVKEIelUm9I7nVJmKc/5n+BniqUIYata07uW9hVBZ11YHMfGIdpZRARkJ27/J0jnqSpWZRQiVexCffxD0dRWPaJkagfp76tHEqKVPsRBCXAi4pJRPdVv/CaBFSvniAOdeClRJKfdFjnscuBSIFwsJRH9tmcA4qAvRB6kuz73/dXjzl8reP/+TsPhzPaOZpqxUP9h//w88/w1V67/iE4l1uDVVwbofKFPcgmtgyefHns3YZFGZ3L1Fg3VHCBVmbHOCi05TTWzk0U5CxSPqsLZnjU5HqdmmluhoLBRUfwdzixaKUY6Qfdh1hRBvApdJKRu6rc8D/i6lPL3fEytRWS2l/GLk838Ay6SUX43bpxj4N5ANOIDzpJQbI2aoD4HdqHnQviulfL2Xa1wHXAdQWFi4+PHHHx/MPaeGoHdoNvQBcHsDOO0Dd7JWXzPT9/+e/KZ3cTtK2TX1OtpcU/s9xgh2MGvPPeQ3v0dd3hnsmnYdYeMEJ0OSkom1/2Rq9WMEzC52zriBY1nzBn34YO836QgR8Y8ksCOW4ch3o/P74W734HTYI6vivzeyy0vsjTCUrX80CsQgcLvdOJ395O6MM0bT/a5atWqjlHLJQPv1Z4aydRcKAClloxAiUfNuXgP8Xkr5MyHE6cAjQogKoBaYLKVsEkIsBp4VQsyVUnYx9ksp7wfuB1iyZIlcuXJlgpqVYJr3q4J8CaRyIBu+DKu5i7fco0IDl16Hc/4nWTzYUhXz/x9s+jOF7/2OwlAtXPAD5XQcDh3N8Oodar6F0uXYzr6JBX1VXO2DAe93JLA6VbTUCMxeVllZyaj9PicBfb+jn/56jgwhhFlK2aWoiRDCAgxi/M1hIN4QXRJZF88XgNUAUsr1Qgg7kCelrAd8kfUbhRB7gRnAhkFcd3Thrk+4UAzI8UPw+p3KkV18Cpz17aF39MIECz8N+TOU2eiZ62HVf6vJ7YfCwXeUUPjb4cxvwOxLxubTrz1LmejGYts1mgTQX/zc08AD8aMIIYQTuDeybSDeA6YLIcqFEFbgauC5bvscBM6NnHs2KiavQQiRH3GQI4SYAkwH9g3ulkYRvjYV/TRShIPwwZ/gr59Xs5CddRN89BfDHxGAcoBfcR9kTIQX/kvlZIQHEQ4Z9MFbv4F/3axs0Zffp2ZCG4udrSNfzR8xFtuu0SSI/kYW3wV+CBwQQhxAGWknAQ8C/zPQiaWUQSHEV4EXUGGxD0kpPxRC3A5skFI+B3wLJUjfQBlf10gppRDiLOB2IUQACANfklI2D/82U0DQPzLZzFHqd8JrP1WJclNWwhlfU5EwicBVDJf8Bt74Bbz/R1Vie9V/94wEinKsWo1GmvfC3CtUaO5YnJgHlEiOxFzQGs0op0+xiJifbhFCfB+YFlldJaX0DPbkUsq1qHDY+HW3xr3fDizv5bi/An8d7HVGHdFs5pEoSxz0qZpG255SyVYX/BDKzkz8dcw2VS+pYLYaMTxzPZx/u6oRFUVKFQ67/i4VKbT6xzC53ziIUYxQkwzpCB2NBug/dPaKbqskkCWE2CSlHEaq7klEy6GRqSRbvwNe+V91vdmXwLLrlBM2WQihTEm50+DF2+BvX1H+kOkXKL/Mqz+FA28q09XKWxI3shlphKHMTidLfSiNZhD0Z4b6WC/rcoD5QogvSClfTlKbxjYjUZ47HKTswBPw1rOqQ774ZzBxcXKvGU/hXLjiflj3fSVWh96DIx8owTjtBpj3ibFbrdWwqoinweRQaDQnEf2ZoT7X23ohRCnwBLAsWY0as/g71KQ/yaR5P1T+mLLG3apUxxlfTc0TcHqOEql37oOtT6oSDat/3NUsNVJY0iNVU/1qGW55DXOaSrYba0mCGs0IMORyH1LKA5HwWU08ya4kGw4pv8R7vwOLg22zvknFWZck51qDxWSG07+iqtVmlqgpQ0cSc5oqW9J9BrtwqFM4QsHO9+Fg34JidSnT0wjkUGg0Y5Ehi4UQYhaRHAhNBCmTW0m29Yiq2XR0i3Jer/gWjftG0b8gd9rA+yQSw6ZEIlbArxsmA0xp/ZuS4gUlHFKObB0aq9H0SX8O7r/TM+4zBygGPpPMRo05OpqSU0lWStj5D1j/W+V0Xfkd5UwWAjia+OuNdgyrKgeennPiHftgBEWj0cTob2RxZ7fPEmhGCcZngPXJatSYIxkO7Y4mFV106G2YsAhW3gzOwsRfR5iUvyHoU/NJjES471AxmZUfoWCOfvrXaFJEfw7uV6PvhRALgU8BVwL7Gcs5EIkmNkNYAtn7ikqAC3rhjK/D3MuSE13UPfLHWRiZqrQ+9ZMzgRpNOQtVBvXOJi0UGk0K6c8MNQNV6O8aoBH4C6pK7aoRatvYwJPAxHJvqyojvvdlyJ8Nq76jJtdJBlYnZJd3nWTGZAJnvpoHwXNMzb0RnW9gJBEmcBSozGntcNZoRgX9maF2Aq8DH5VSVgFEynJo4vEcS8x5Dr4Dr/1ETZC05PNwyqeU+SUZpOcq01NfT+pCKL9Aeo5qT3tDZNKeZCOUUDmL9ExpGs0oo79f5BWo4n+vCCH+BTxOQov4jwN87hM314SD8OavVZmM7DJYfUcScxWECnF15A3+kLQstfjcaqSRlClhI+LkLAKzNQnn12g0J0p/PotnUfNIOFAz3N0IFAgh7gGekVL+e4TaOHo5UROUlPDaz2D3P9XsdUu+kLyCeyazEqPhJvBFZ3sLeJRoeI4z9CKJkYmDzHa1WOyd77U/QqMZ1Qw41pdStgOPAY8JIbJRTu6bUTPcnbxIGekwT4CNv1dCsehaWNJrwnxiMKephLNECJElTYmOy68c4R1NPRPchEnlQsSLgdmurq9FQaMZkwzJMCylPIaame7+5DRnDOE9DnIQ8zr0xY7n4f0/wMyPwOI1CWtWD2wZqnNPtKPYbFUmLWdRZ+iwJU4UNBrNuEJ7EYfLiTi2D66HN34Ok5bCim8m72nbWQgZE5Jz7iiGGVxJyP/QaDSjCi0WwyEUVGGuw6F+J7z0fVUi47zvJSfiKZpo11c5DI1GoxkiWiyGg3c4zl2gpQb+dYuqQ7T6DlUtNdGYLCrRzpqEc2s0mpMWLRbDoWMYUVCe4/DPm5Uz+KKfJOep3+JQjmxdYluj0SQYLRZDJegb+ix4AQ/86zsque2jv4CsSYlvV1qOyvbW0UYajSYJaLEYKkMdVYSDsO52aNyl5qwunJv4No2EI1uj0ZzUjNG5L1PIUKKgpIQ3fqWin5b/HzUXRaJJy9FCodFoko4Wi6Hgb4fQECYd+uAR2Pl3OOXTMOfSxLfHlpG8QoMajUYTR1LFQgixWgixSwhRJYS4pZftk4UQrwghPhBCbBFCfCRu23cix+0SQlyYzHYOmqGYoHb9EzY8pCYrOvWLiW+LECrZTvsoNBrNCJA0n4UQwgDuAs4HaoD3hBDPSSm3x+32XeAJKeU9Qog5wFqgLPL+amAuMAF4SQgxQ8oTSZk+QaSMhMwOgkPvwmt3wsTFcNZNie/QDavKktbluzUazQiRzJHFUqBKSrlPSulHVa3tbouRQEbkfSZwJPL+UuBxKaVPSrkfqIqcL3V4WwY3i1zjbnjxVhXCev7tiQ9jFYbKo9AFgDUazQiSTLGYCByK+1wTWRfP94DPCCFqUKOKrw3h2JFlMI7t1lqVS2HPhIv+H1gdCW6EUCKk543WaDQjTKpDZ68Bfi+l/JkQ4nTgESFExWAPFkJcB1wHUFhYSGVlZXJaCSpXoh/MgTYWbb0NS8DPB7O+S8f+AHA0sW0wrGBSpjC3253c+x1l6Psd3+j7Hf0kUywOA/HZZyWRdfF8AVgNIKVcL4SwA3mDPBYpZawC7pIlS+TKlSsT1fautDdBy8G+twd98I8fgL8BLv45S4vmJb4NGRPVNKMRKisrSdr9jkL0/Y5v9P2OfpJphnoPmC6EKBdCWFEO6+e67XMQOBdACDEbsAMNkf2uFkLYhBDlwHTg3SS2tX/6m+RISnj5h1C3Hc75H0iGUDjyuwiFRqPRjDRJG1lIKYNCiK8CLwAG8JCU8kMhxO3ABinlc8C3gAcic3tLYI2UUgIfCiGeALYDQeArKYuECvr7n3/66Faofh2WXgflZyX++vZMNW+ERqPRpJCk+iyklGtRjuv4dbfGvd8OLO/j2B8BP0pm+wbFQI7tqpfUhD9zL0v8ta1OyCpL/Hk1Go1miOgM7oHozwQVCsC+Sihdnvhy42Y7ZJeDSf+LNBpN6tE9UX/4OyDo7Xv74Q3ga4Vp5yb2utE5KYxUB6tpNBqNQotFf/Q3qgCoWqfqM5WcmrhrCpMSCj2PtUajGUVosegLKfv3VwQ8UP0GTDk7gVnakXpPepY7jUYzytBi0Re+1v7Lexx4S5mopp2XuGtmTlLRTxqNRjPK0GLRF4OJgnLkJy6vwlkEjtzEnEuj0WgSjBaL3giHVeHAvvC2qMqyU89VPoYTJT0XMopP/DwajUaTJLRY9Ib3OMhw39v3vQoylJgoqPRcPYGRRuRNtcgAAA7MSURBVKMZ9ejYzN4YaJKjvesgqxRyp53YddLzIGvSwPtpNBpNitEji+6EAuBv63u7ux5qN6tRxYlMauTI10Kh0WjGDHpk0Z2BHNt7X1avJ2KCchRAZmqn59BoNJqhoEcW3RnIBFX1EhTMViXDh4MWCo1GMwbRYhFPwAPBfiY5OlYNTVXDz61wFmqh0Gg0YxJthopnwFHFOhUqO2Xl0M/tLNLhsRqNZsyixSKe/vwVUiqxmLBIhbsOBVcxuIpOrG0ajUaTQrQZKoq3FcKBvrc37IC2I0N3bLsmaKHQaDRjHi0WUQaKgtrzkioYWL5i8Od0TQBX4Ym1S6PRaEYB2gwFkfIex/vZHoR9r8Dk09XsdYMhY6KeN1uj0YwbtFiASsLrr7zHkQ/UyGPa+YM7X0YJOPMT0zaNRqMZBWixgP6FAlRuhdUBk5YOfK7MSeDIS0y7NBqNZpSgfRYDEfTB/teh/OyBZ6/LnKyFQqPRjEu0WAzEwfUQ6Bg4Cipzsp6PQqPRjFu0WAxE1TpIy4HiU/rex5GvhUKj0YxrkioWQojVQohdQogqIcQtvWz/hRBiU2TZLYQ4HrctFLftuWS2s098bXDwbZh6DpiMvvdLyx65Nmk0Gk0KSJqDWwhhAHcB5wM1wHtCiOeklNuj+0gpvxG3/9eAhXGn8Egp+3mcHwH2v64S9fqrBWXYlPNbo9FoxjHJHFksBaqklPuklH7gceDSfva/BvhzEtszdPa+pPIl8mf2vU9a1si1R6PRaFJEMkNnJwKH4j7XAMt621EIUQqUAy/HrbYLITYAQeAOKeWzvRx3HXAdQGFhIZWVlcNrqQxB0N9lldV/jNMPf8CBSVdQvb2u72PNx0HsHt51TwC32z38+x2D6Psd3+j7Hf2MljyLq4GnpJShuHWlUsrDQogpwMtCiK1Syr3xB0kp7wfuB1iyZIlcuXLl8K7uOabKj8ez9XVAUnb6JZRl9VHbyWxXc1ukgMrKSoZ9v2MQfb/jG32/o59kmqEOA/HzhpZE1vXG1XQzQUkpD0de9wGVdPVnJJ+qdZA3Q8213Rfasa3RaE4SkikW7wHThRDlQggrShB6RDUJIWYB2cD6uHXZQghb5H0esBzY3v3YpNFSAw07B86tsGt/hUajOTlImhlKShkUQnwVeAEwgIeklB8KIW4HNkgpo8JxNfC4lFLGHT4buE8IEUYJ2h3xUVRJp2odIGDKqr73MaeBxT5iTdJoNJpUklSfhZRyLbC227pbu33+Xi/HvQXMS2bb+kRKVQuqeEH/VWO1CUqj0ZxE6Azu7jTtgZZDA8+zrUNmNRrNSYQWi+5UvQQmM5Sf1fc+FsfARQU1Go1mHKHFIp5wCKpehknLwJ7R9356VKHRaE4ytFjEc3QLdDQOHAWl/RUajeYkQ4tFPFXrVKJd6Rl972N1qrm4NRqN5iRCi0WUkB/2vwplK5Rg9IUeVWg0mpMQLRZRDr2nSpJP7y8KSuhEPI1Gc1KixSJK1UtKCCYu7nsfmwuM0VJOS6PRaEYOLRYAPjcceAumrFRhs32hRxUajeYkRYsFQNWLEPINkIgndMis5v+3d68xUpV3HMe/P1hYvAAu2lKiqFRpLU0rEkqNMYZUReQNbV802CZSq7FJ0WgTTbAmStQX1l5srMYGBaMtSuOllRdYxAttar0hIipWWLxUqDcKKlgriv++OM/gYZiZs4vMzuzZ3yc52TPPPGfm+c+zO/99zuU5ZgOWkwXA2nth+Bdg9Ffr1+kc3vjWqmZmJeZk8f7m7PapR50MUv16PgvKzAYwH60dPBROuRy6jqxfR4Ng2Mg+a5KZWbvxyGLYCJh0Jhx0eP063gVlZgOck0VPeBeUmQ1wThZFNAg6vQvKzAY2J4siw0bCIH9MZjaw+VuwiC/EMzNzsmhIg30WlJkZThaNDRvZ+NoLM7MBwsmiEU/vYWYGOFnUN6gDOhvcWtXMbABparKQNF3Si5K6Jc2t8fy1klanZZ2kd3LPzZa0Pi2zm9nOmrwLysxsl6ZN9yFpMHADcCqwEXhS0pKIWFupExE/zdU/HzgurY8CLgcmAwE8lbbd2qz27sEX4pmZ7dLMkcUUoDsiXoqIHcBiYGaD+mcAd6T104DlEbElJYjlwPQmtnV3g4ZkU3yYmRnQ3GRxKPBa7vHGVLYHSUcA44CHerttU/jAtpnZbtpl1tlZwF0RsbM3G0k6FzgXYPTo0axYsWLv3j12wsc7Pn3csRXUvXev1Ue2b9++9/H2Q4633Bxv+2tmstgEjM09PiyV1TILmFO17dSqbVdUbxQR84H5AJMnT46pU6dWV+mZD7bC1ley9cFDG98EqU2sWLGCvY63H3K85eZ4218zd0M9CYyXNE7SULKEsKS6kqRjgC7g0VzxMmCapC5JXcC0VNZ8nt7DzGwPTRtZRMTHks4j+5IfDCyMiOclXQGsjIhK4pgFLI6IyG27RdKVZAkH4IqI2NKstu7GZ0GZme2hqccsImIpsLSq7LKqx/PqbLsQWNi0xtUyuBOG7t+nb2lm1h/4Cu48nwVlZlaTk0Wed0GZmdXkZFHRMQyG7NfqVpiZtSUniwqPKszM6nKyqPAps2ZmdbXLFdytNWR/6OhsdSvMzNqWRxbgRGFmVsDJwszMCjlZmJlZIScLMzMr5GRhZmaFnCzMzKyQk4WZmRVysjAzs0JOFmZmVsjJwszMCil3g7p+TdLbwKutbkcfOgTY3OpG9CHHW26Ot3WOiIjPFVUqTbIYaCStjIjJrW5HX3G85eZ42593Q5mZWSEnCzMzK+Rk0X/Nb3UD+pjjLTfH2+Z8zMLMzAp5ZGFmZoWcLNqUpFckPStptaSVqWyUpOWS1qefXalckq6T1C1pjaRJrW19MUkLJb0l6blcWa/jkzQ71V8vaXYrYumJOvHOk7Qp9fFqSTNyz12S4n1R0mm58umprFvS3L6Oo6ckjZX0sKS1kp6XdEEqL2UfN4i3PH0cEV7acAFeAQ6pKrsGmJvW5wI/T+szgPsAAccDj7e6/T2I7yRgEvDc3sYHjAJeSj+70npXq2PrRbzzgItq1J0APAN0AuOADcDgtGwAvggMTXUmtDq2OvGOASal9eHAuhRXKfu4Qbyl6WOPLPqXmcCtaf1W4Nu58tsi8xhwkKQxrWhgT0XE34AtVcW9je80YHlEbImIrcByYHrzW997deKtZyawOCI+jIiXgW5gSlq6I+KliNgBLE51205EvB4Rq9L6NuAF4FBK2scN4q2n3/Wxk0X7CuB+SU9JOjeVjY6I19P6G8DotH4o8Fpu2400/kVtV72Nrwxxn5d2uyys7JKhZPFKOhI4DnicAdDHVfFCSfrYyaJ9nRgRk4DTgTmSTso/GdlYtrSnspU9vuRG4ChgIvA68KvWNmffk3QgcDdwYUS8l3+ujH1cI97S9LGTRZuKiE3p51vAn8iGp29Wdi+ln2+l6puAsbnND0tl/U1v4+vXcUfEmxGxMyI+AW4i62MoSbyShpB9cS6KiHtScWn7uFa8ZepjJ4s2JOkAScMr68A04DlgCVA5G2Q2cG9aXwKcmc4oOR54NzfU7096G98yYJqkrjS8n5bK+oWq40rfIetjyOKdJalT0jhgPPAE8CQwXtI4SUOBWalu25EkYAHwQkT8OvdUKfu4Xryl6uNWH2H3sudCdibEM2l5Hrg0lR8MPAisBx4ARqVyATeQnUXxLDC51TH0IMY7yIblH5Htlz17b+IDfkR2cLAbOKvVcfUy3t+neNaQfSGMydW/NMX7InB6rnwG2Zk2Gyq/F+24ACeS7WJaA6xOy4yy9nGDeEvTx76C28zMCnk3lJmZFXKyMDOzQk4WZmZWyMnCzMwKOVmYmVkhJwvr1yQdnJvR842qGT6H9vA1bpH05YI6cyT9YB+1eWZq3zNpltJzCup/K117UOu5MZKW5l5rSSofK+mP+6K9ZuCbH1mJSJoHbI+IX1aVi+x3/ZOWNGz3tnQCL5NdR/Dv9PiIiFjXYJurgM0R8Zsazy0AVkXEDenx1yNiTZOabwOYRxZWSpKOTv9pLyK7sHGMpPmSVqb7DVyWq/t3SRMldUh6R9LV6T/1RyV9PtW5StKFufpXS3oi3XfghFR+gKS70/veld5rYlXTRpJdgLYFILJZR9el7UdLuidt94Sk4yUdBZwDXJxGIydUvd4Ysov8SK+3Jhf/6rR+S260tVnSpal8bnqfNfnPw6wWJwsrs2OAayNiQmRzbc2NiMnAscCpkibU2GYk8NeIOBZ4lOzq4VoUEVOAi4HKF+35wBsRMQG4kmzm0d1ENtfXMuBVSbdLOkNS5e/wOuCa1MbvATdHxAbgZuAXETExIv5R9ZLXA7dKekjSz1RjavqIOCsiJpJNN/F2qj8DOBz4JtkkdyfUSERmuzhZWJltiIiVucdnSFoFrAK+QnYDmmofRMR9af0p4Mg6r31PjTonkt1/gIioTNWyh4j4IXAqsJLsBkDz01OnAL9LI4I/A12S9qsfHkTEUrJZTRekeJ6WdHB1PUn7A3cCP4mIjWRzLJ0OPE32eRwNfKnRe9nA1tHqBpg10fuVFUnjgQuAKRHxjqQ/AMNqbLMjt76T+n8jH/agTl1pd9EaSbeT3SjnHLLdU1Miu+nNLtkhl4av9R9gEbBI0l/IklZ1oppPdrOdhysvC1wVEQt623YbmDyysIFiBLANeE+f3oFtX3uEbPcRkr5GjZGLpBHa/d4kE4FX0/oDwJxc3crxjm1kt+rcg6STK6MPSSPIbtH5r6o6FwBDqg78LwPOVjarMZIOk3RID+O0AcgjCxsoVgFrgX+SfTk/0oT3+C1wm6S16b3WAu9W1RFwiaSbgA+A7Xx6XGQOcKOks8j+Nh9OZfcCd0r6LjCn6rjFN4DrJX1E9s/fjRHxtKSjc3UuAv5bOeANXB8RN0s6BngsjVy2Ad8HNn/mT8FKyafOmu0jkjqAjoj4X9rtdT8wPiI+bnHTzD4zjyzM9p0DgQdT0hDwYycKKwuPLMzMrJAPcJuZWSEnCzMzK+RkYWZmhZwszMyskJOFmZkVcrIwM7NC/wfh/dVR1QtJuQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curve(degree=2, alpha=0.05)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图表明，降低正则化系数 alpha 至 0.05，曲线将逐渐收敛，如果加入更多数据，可以进一步改善模型在验证集上的表现。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果把 alpha 设为 $10^{-4}$，让模型更复杂，会出现什么情况？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curve(degree=2, alpha=1e-4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图表明，与正则化系数 alpha=0.05 相比，在训练集和验证集上，AUC 都下降了，出现过拟合现象。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "构建学习曲线和验证曲线可以帮助我们为新数据调整合适的模型复杂度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "关于验证曲线和学习曲线的结论："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 训练集上的误差本身不能说明模型的质量。\n",
    "\n",
    "- 交叉验证误差除了可以显示模型对数据的拟合程度外，还可以显示模型保留了多少对新数据的概括能力。\n",
    "- 验证曲线是一条根据模型复杂度显示训练集和验证集结果的曲线：如果两条曲线彼此接近，且两者的误差都很大，这标志着欠拟合；如果两条曲线彼此距离很远，这标志着过拟合。\n",
    "- 学习曲线是一个根据观测数量显示训练集和验证集结果的曲线：如果两条曲线收敛，那么增加新数据收益不大，有必要改变模型复杂度；如果两条曲线没有收敛，增加新数据可以改善结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实验总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本次实验主要使用逻辑回归的方法构建线性回归和线性分类模型，正则化、验证曲线、学习曲线方法可以帮助我们更好更快的构建模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<i class=\"fa fa-link\" aria-hidden=\"true\"> 相关链接</i>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [<i class=\"fa fa-external-link-square\" aria-hidden=\"true\"> 《深度学习》\n",
    "</i>](http://www.deeplearningbook.org).\n",
    "- [<i class=\"fa fa-external-link-square\" aria-hidden=\"true\"> scikit-learn 文档</i>](http://scikit-learn.org/stable/documentation.html) \n",
    "- [<i class=\"fa fa-external-link-square\" aria-hidden=\"true\"> scikit-learn 指南</i>](https://github.com/amueller/scipy-2017-sklearn)\n",
    "- [<i class=\"fa fa-external-link-square\" aria-hidden=\"true\"> 适合线性回归和逻辑回归的机器学习算法实现</i>](https://github.com/rushter/MLAlgorithms)\n",
    "- [<i class=\"fa fa-external-link-square\" aria-hidden=\"true\"> 了解实验楼《楼+ 机器学习和数据挖掘课程》</i>](https://www.shiyanlou.com/louplus/)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
